我有以下列表:
v1<-c('hello', 'bye')
v2<-c(1,2,3)
v3<-c(5,6,5,5,5,5)
l<-list(v1, v2, v3)
我想阅读列表中每个成员的第二个元素。因此结果可能是:
'bye' 2 6
我使用&#39; sapply&#39;与指示:
sapply(1:3, function(i){l[[i]][2])
它有效。但我想用更简单的指令来做,我试过
l[[1:3]][2]
但它不起作用。这是获取列表中每个成员的第二个元素的更简单方法。
谢谢!
答案 0 :(得分:0)
我建议
sapply(l,`[[`,2)
#[1] "bye" "2" "6"
修改强>
请注意,此操作的结果是向量,因此必须将所有元素强制转换为相同的类型(在这种情况下,它是character
)。如果您想保留结果组件的类型,则应使用
lapply(l,`[[`,2)
返回一个列表,R中列表的元素可以是不同的类型。 (感谢理查德对这方面的关注!)
答案 1 :(得分:0)
如果你想对它进行矢量化(避免*apply
循环),你可以使用stringi::stri_list2matrix
(但是,你会丢失你的课程)
library(stringi)
stri_list2matrix(l, byrow = TRUE)[, 2]
## [1] "bye" "2" "6"