在 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 提供给“ [[" 能够提供列表项值。
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 提供给“ [[" 能够提供列表项值。