从lapply中提取不同长度的输出

时间:2013-01-05 17:05:49

标签: r lapply

有谁可以帮我解决这个问题。我在@Arun提供的以下代码中使用lapply

out <- lapply(1:length(f1), function(f.idx) { 
  df1 <- read.delim(f1[f.idx], header = T) 
  df2 <- read.delim(f2[f.idx], header = T) 
  df3 <- read.delim(f3[f.idx], header = T) 

  idx.v <- get_idx(df1) 
  result <- get_result(idx.v, df2, df3)

})

现在,out是110个文件的列表。这些输出文件的长度不同,因此我无法使用as.data.frame(do.call(rbind, out))。 有没有办法以循环方式将每个文件保存为单独的文件,或者我是否必须手动执行(例如out[1]out[2]等等。)

1 个答案:

答案 0 :(得分:2)

你想通过do.call(rbind...实现什么目标?这是为了组合列表中的数据。我不确定你为什么会在那里贴上“as.data.frame”。如果list的{​​{1}}具有相同的列,但行数不同,并且您基本上希望将这些data.frame“堆叠”在一起,那么您应该能够使用以下内容获得一个大的data.frame,然后保存该单个对象:

data.frame

听起来您在名为“out”的列表中有不同的do.call(rbind, out) s,并且正在尝试将data.frame保存为工作目录中的单个文件。如果是这种情况,请尝试以下方法:

data.frame

如果列表中lapply(names(out), function(x) write.csv(out[[x]], file = paste(x, ".csv", sep = ""))) 的名称不唯一,则可能需要采用不同的方法。

如果您链接到之前的相关问题,那可能比简单地提及与您共享代码的人更好。