在for循环中增加列表将返回NAs

在for循环中增加列表将返回NAs,r,loops,R,Loops,我想使用for循环收回一些索引,现在,循环只返回NAs df <- data.frame(v1 = c("a", "b", "c", "d", "e"), v2 = c("f", "g", "h", "i", "j"), v3

我想使用for循环收回一些索引,现在,循环只返回NAs

df <- data.frame(v1 = c("a", "b", "c", "d", "e"),
                 v2 = c("f", "g", "h", "i", "j"),
                 v3 = c("aa", "bb", "cc", "bb", "dd"))

vec <- c("aa", "bb", "ee")

res <- list()


for (i in(vec)){
 temp <- vec[i]
 res[[i]] <- grep(temp, df[,3])
}

当我在为这个奋斗的时候

res

$aa
[1] 1

$bb
[1] 2 4

$ee
[1]

这个我一直不知道的非常简单的事情是什么?

我们可以使用
lappy
来循环
模式
向量,调用
grep
将参数“x”指定为“v3”列

lapply(vec, grep, x = df$v3)

或者使用匿名函数调用

lapply(vec, function(pat) grep(pat, df$v3))

列表
res
可以在OP的post中初始化为

res <- vector('list', length(vec))
res
df[1]1
#> 
#>bb美元
#> [1] 2 4
#> 
#>$ee
#>整数(0)

您在vec的长度上循环,因此需要沿着
1:length
。否则,您将使用
vec
中的实际值进行子集设置,而不是它们的索引,因此
NA
res <- vector('list', length(vec))
for (i in seq_along(vec)){
   temp <- vec[i]
   res[[i]] <- grep(temp, df[,3])
  }