嵌套的for循环仅迭代最后一个条目[r]

时间:2020-03-14 23:31:41

标签: r

我正尝试从我的数据帧列表中提取32行数据帧的每一行。但是,它仅迭代两个for循环中的最后一个值。我不确定为什么这行不通,但也许我应该初始化一个空的数据框列表,而不是一个空列表?

a <- list()


for (z in 1:200){
  for (i in 1:32){
    a[z] = ListOfDataFrames[[i]][["X"]][[z,1]]
  }
}

这仅产生ListOfDataFrames [[32]] [[“ X”]]的200个值的列表,这是列表中的最后一个数据帧。

这里是(str(ListOfDataFrames))

List of 32
 $ :List of 2
  ..$ X           :'data.frame':    200 obs. of  3 variables:
  .. ..$ pressure   : num [1:200] 635 640 760 890 900 900 910 920 1000 1000 ...
  .. ..$ pressure1  : num [1:200] 735 740 820 840 890 900 910 920 1000 1000 ...
  .. ..$ pressure2  : num [1:200] 645 670 760 890 900 900 910 920 1000 1000 ...

1 个答案:

答案 0 :(得分:1)

根据显示的结构,带有tidyverse的选项为

library(dplyr)
library(purrr)
out <-  map(ListOfDataFrames, ~ pluck(.x, "X") %>%
              group_split(grp = row_number(), keep = FALSE)) %>% 
          transpose %>% 
          map(bind_rows)

通过for循环,最好初始化list元素的预定义长度

l1 <- nrow(ListOfDataFrames[[1]]$X)
a <- vector('list', l1)
for (z in seq_len(l1)){
  for (i in seq_along(ListOfDataFrames)){
    a[[z]] = rbind(a[[z]], ListOfDataFrames[[i]][["X"]][z,])
  }
}

-检查

all.equal(out, a, check.attributes = FALSE)
#[1] TRUE

数据

ListOfDataFrames <- list(list(X = structure(list(col1 = 1:6, col2 = 7:12), class = "data.frame", row.names = c(NA, 
-6L)), Y = 1:7), list(X = structure(list(col1 = 1:6, col2 = 7:12), class = "data.frame", row.names = c(NA, 
-6L)), Y = 1:7), list(X = structure(list(col1 = 1:6, col2 = 7:12), class = "data.frame", row.names = c(NA, 
-6L)), Y = 1:7), list(X = structure(list(col1 = 1:6, col2 = 7:12), class = "data.frame", row.names = c(NA, 
-6L)), Y = 1:7), list(X = structure(list(col1 = 1:6, col2 = 7:12), class = "data.frame", row.names = c(NA, 
-6L)), Y = 1:7))
相关问题