r for 循环只返回最后一个元素

时间:2021-03-23 02:53:23

标签: r for-loop

我有我的清单:

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

如图所示,只导出了最后一个元素,我已经搜索了几个类似的问题,但仍然无法解决我的问题,请问是什么问题?

1 个答案:

答案 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)