首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跳出内部循环

跳出内部循环
EN

Stack Overflow用户
提问于 2011-12-09 13:22:59
回答 3查看 3.8K关注 0票数 1

我正在尝试将一个循环嵌套在另一个循环中,并在满足条件时中断内循环并继续执行外循环。我的数据帧a_2011TRS的格式如下:

代码语言:javascript
复制
a_2011<- data.frame(c("10N11W11", "10N11W11", "10N12W7", "10N13W22" , "10N14W1"))
TRS <- data.frame(c("10N12W7","10N13W22","10N14W1", "10N15W33"))

for (i in 1:nrow(a_2011))
{
  a_2011$City[i] <- 1
  for (j in 1:nrow(TRS))
  {
    if ( as.character(a_2011[i,1]) ==  as.character(TRS[j,1]) )
    {
      break
    }
    else
    {
      a_2011$City[i] <- 0
    }
  }
}

a_2011$City的期望输出是一个由2个0和3个1组成的列向量。但是上面的代码并没有跳过内循环中break语句之后的命令。

希望您能帮助我们找出这里的问题所在。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-09 13:35:53

问题是,只有当第一行TRS匹配时,内部循环才会中断。要让你的代码正常工作,你必须这样做:

代码语言:javascript
复制
a_2011<- data.frame(c("10N11W11", "10N11W11", "10N12W7", "10N13W22" , "10N14W1"))
TRS <- data.frame(c("10N12W7","10N13W22","10N14W1", "10N15W33"))

for (i in 1:nrow(a_2011))
{
    flag <- 0
    for (j in 1:nrow(TRS))
    {
        if ( as.character(a_2011[i,1]) ==  as.character(TRS[j,1]) )
        {
             flag <- 1
             break
        }
    }
    a_2011$City[i] <- flag
}

您可以不再需要内部循环,如下所示:

代码语言:javascript
复制
a_2011<- data.frame(c("10N11W11", "10N11W11", "10N12W7", "10N13W22" , "10N14W1"))
TRS <- data.frame(c("10N12W7","10N13W22","10N14W1", "10N15W33"))

for (i in 1:nrow(a_2011))
{
    flag <- any(as.character(a_2011[i,1]) ==  as.character(TRS[,1]))
    a_2011$City[i] <- as.numeric(flag)
}

..And为了进一步简化它,您还可以删除外部循环:

代码语言:javascript
复制
a_2011<- data.frame(c("10N11W11", "10N11W11", "10N12W7", "10N13W22" , "10N14W1"))
TRS <- data.frame(c("10N12W7","10N13W22","10N14W1", "10N15W33"))

a_2011$City <- as.numeric(a_2011[[1]] %in% TRS[[1]])
票数 5
EN

Stack Overflow用户

发布于 2011-12-09 13:39:13

在R中不需要循环就可以做到这一点。

代码语言:javascript
复制
a_2011<- c("10N11W11", "10N11W11", "10N12W7", "10N13W22" , "10N14W1")
TRS   <- data.frame(c("10N12W7","10N13W22","10N14W1", "10N15W33")

city  <- rep(0, 5)
city[a_2011 %in% TRS] <- 1
票数 5
EN

Stack Overflow用户

发布于 2011-12-09 16:14:35

你根本不需要循环。这就是ifelse的用途。

代码语言:javascript
复制
a_2011$City <- ifelse( a_2011[,1] %in% TRS[,1], 1, 0)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8441430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档