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

时间:2015-03-24 17:22:42

标签: r list lapply data-retrieval

无论如何都要将矢量应用于R

中的[[]]

e.g。 b是一个列表

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

它不起作用,我知道[[]]和$只接受单个值,[]接受向量,但b [a]是列表列表,这不是我想要的。

无论如何都要解决这个问题,因为它真的很烦人,我不敢用lapply。只是因为它返回列表列表的列表,除了使用[[]]或$我没有其他方法进入atom元素。但是[[]]和$不容易做循环。

像python一样,你可以随时使用[],例如列表[3] [2] [3] ...

R有同样的事吗?

谢谢。

1 个答案:

答案 0 :(得分:4)

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

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

如果您的目的是返回&#39; a&#39; -list的所有三个元素,那么您根本无法使用&#34; [[&#34;除非你把它包装在一些循环函数中。如果您使用sapply,您将获得一个字符向量。

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

这可能是你的目标。

说明如何将多元素向量传递给&#34; [[&#34;并没有抛出错误,看看这个:

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

向量:c(2,1)正在扩展为&#34; [[&#34;与...相同的电话:

 b2[[2]][[1]]

b2[[2]]返回list('test','dsdfs'),然后将[[1]]应用于该结果并返回原子向量'test'。这就是前面的错误消息调用&#34;递归索引&#34;,但在这种情况下,进程能够找到要返回的单个列表元素,因为所有索引都是连续/递归地提供给&#34 ; [&#34;能够提供列表项值。