无论如何都要将矢量应用于R
中的[[]]e.g。 b是一个列表
b <- list(16,'dsdfs',35)
a <- c(1:3), b[[a]]
它不起作用,我知道[[]]和$只接受单个值,[]接受向量,但b [a]是列表列表,这不是我想要的。
无论如何都要解决这个问题,因为它真的很烦人,我不敢用lapply
。只是因为它返回列表列表的列表,除了使用[[]]或$我没有其他方法进入atom元素。但是[[]]和$不容易做循环。
R有同样的事吗?
谢谢。
答案 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;能够提供列表项值。