我有一个列表,如X,其中包含某些条目X $(y1,...),条目的名称保存在名为Y的char矢量中。现在我想使用mapply来访问内容X $ Y。我写了以下mapply行:
aux<-mapply(function(x,y) x$y$family ,X,Y)
目标是能够在不编写循环的情况下访问“familly”内容。 我收到以下错误
Error in x$y$family : $ operator is invalid for atomic vectors
我在哪里犯错误?
例如:
X<-list(x1=c(1,2),y1=c(3,4))
Y<-c("x1","y1")
aux<-mapply(function(x,y) x$y[[1]],X,Y)
我希望将其作为c(1,3)
答案 0 :(得分:1)
使用名称向量(&#34; Y&#34;)来对&#34; X&#34;的元素进行子集化。即X[Y]
,循环使用sapply
,并从vector
中的每个list
中提取第一个元素。
unname(sapply(X[Y], `[`, 1))
#[1] 1 3
如果&#34; Y&#34; vector包含&#34; X&#34;的所有names
。元素,没有必要使用X[Y]
(如提到的@Frank),只需直接遍历&#34; X&#34;并获得第一个元素
unname(sapply(X, `[`, 1))