簡體   English   中英

嵌套 for 循環僅迭代最后一個條目 [r]

[英]Nested for loop is only iterating the last entries [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 ...

根據顯示的結構,帶有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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM