我有我的清单:
ll<-list(list(rt=c(1,2),it=c(3,4)),
list(rt=c(5,6),it=c(7,8)),
list(rt=c(9,10),it=c(11,12))
)
我想提取列表中的每个元素并通过 for 循环构建一个两列数据框,我尝试:
testf<-function(x){
null.d<-data.frame()
for(i in length(x)){
rtime<-x[[i]]$rt
intensity<-x[[i]]$it
dd<-data.frame(rtime,intensity)
dd$ID<-i
dd<-rbind(null.d,dd)
}
dd
}
test<-testf(ll)
> test
rtime intensity ID
1 9 11 3
2 10 12 3
如图所示,只导出了最后一个元素,我已经搜索了几个类似的问题,但仍然无法解决我的问题,请问是什么问题?
答案 0 :(得分:2)
尝试使用 dplyr::bind_rows
:
dplyr::bind_rows(ll, .id = 'ID')
# A tibble: 6 x 3
# ID rt it
# <chr> <dbl> <dbl>
#1 1 1 3
#2 1 2 4
#3 2 5 7
#4 2 6 8
#5 3 9 11
#6 3 10 12
它与 data.table::rbindlist
的作用相同。
data.table::rbindlist(ll, idcol = 'ID')
如果我必须使用 for
循环,我会这样做:
testf<-function(x){
result <- vector('list', length(x))
for(i in seq_along(x)){
rtime<-x[[i]]$rt
intensity<-x[[i]]$it
result[[i]] <- data.frame(rtime, intensity, ID = i)
}
do.call(rbind, result)
}
test <- testf(ll)