R for循环中的if if语句

时间:2015-07-17 23:29:37

标签: r

我有一个由3列组成的数据表,分配给变量g。

g
#      V1   V2 V3
# [1,]  1  Yes  3
# [2,]  4   No  6
# [3,]  7   No  9
# ...

我正在尝试通过检查g [,2]中的值是“是”还是“否”来创建列表m,然后将一些字符串粘贴到m中。

m <- for(i in 1:nrow(g)){
  if(g[i,2]=='No'){
    paste0("ABC", g[i,1], "DEF", g[i,2], "GHI", g[i,3],"\n")
  } else if(g[i,2]=='Yes'){
    paste0("GHI", g[i,1], "DEF", g[i,2], "ABC", g[i,3],"\n")
  } else {NULL}
}

m
# NULL

但是当我尝试返回m时,它只返回NULL。我希望我看起来像这样:

m
# ABC1DEFYesGHI3
# GHI2DEFNoABC9

有人可以指出我在这里做错了吗?非常感谢你!

1 个答案:

答案 0 :(得分:8)

for循环不返回R中的任何内容。通常,您希望更新在for循环后继续使用的另一个变量。例如:

m <- "intialize" # initialize, sometimes better as just `list()`
for(i in 1:nrow(g)){
  if(g[i,2]=='No'){
    # paste into position i of vector m
    m[i] <- paste0("ABC", g[i,1], "DEF", g[i,2], "GHI", g[i,3],"\n") 
  } else if(g[i,2]=='Yes'){
    # paste into position i of vector m
    m[i] <- paste0("ABC", g[i,1], "DEF", g[i,2], "GHI", g[i,3],"\n")
  } else {
  NULL
  }
}
m
> ...