在 R 中的双方括号中应用向量

apply vector in double square brackets in R

R

中是否有将矢量应用于 [[]] 的方法

例如b 是一个列表

b <- list(16,'dsdfs',35)
a <- c(1:3), b[[a]]

不行,我知道[[]]和$只接受单值,[]接受向量,但是b[a]是list of list,这不是我想要的。

有没有办法解决这个问题,实在是太烦人了,不敢用lapply。只是因为它 returns list of lists of lists,除了使用 [[]] 或 $ 我没有其他方法进入原子元素。但是 [[]] 和 $ 不好做循环。

就像 python,你总是可以用 [] 走得更远,例如列表[3][2][3]...

R有同样的东西吗?

谢谢。

到目前为止,您的示例在语法上是错误的。我假设你打算写:

a <- c(1:3); b[[a]]
#Error in b[[a]] : recursive indexing failed at level 2

如果您的意图是 return 'a'-列表的所有三个元素,那么您根本不能使用“[[”,除非您将它包装在某个循环函数中。如果你使用 sapply 你会得到一个字符向量。

  sapply(a, function(x) b[[x]])
 [1] "16"    "dsdfs" "35"  

这可能是您的目标。

为了说明如何将多元素向量传递给“[[”而不让它抛出错误,请看这个:

> b2 <- list(16,list('test','dsdfs'),35)
> a <- c(1:3); b2[[c(2,1)]]
[1] "test"

向量:c(2,1) 正在被“[[”扩展为与以下调用相同的调用:

 b2[[2]][[1]]

b2[[2]] returns list('test','dsdfs') 然后 [[1]] 应用于该结果,returns 原子向量 'test' .这就是之前错误消息调用 "recursive indexing" 的内容,但在这种情况下,进程能够找到 return 的单个列表元素,因为 successively/recursively 提供给“ [[" 能够提供列表项值。