子集数据帧列表 - 写入输出时出错

时间:2014-05-15 12:43:24

标签: r list for-loop lapply write.table

我在4个不同的位置有4个不同的.csv文件,我想使用相同的标准对它们进行子集化。然后我想以#34; originalfilename_cpt.csv"形式写出输出。对于他们中的每一个(理想情况下是原始位置,但我已经放弃了 - 不要介意将它们写入工作区并手动移动它们)

因为它们位于不同的位置,所以我首先单独阅读文件:

data1 <- read.csv("Subsets\\Folder1\\data1.csv")
data2 <- read.csv("Subsets\\Folder2\\data2.csv")
data3 <- read.csv("Subsets\\Folder3\\data3.csv")
data4 <- read.csv("Subsets\\Folder4\\data4.csv")

然后创建了包含所有文件的列表:

mylist <- list(data1, data2, data3, data4)

从这里我尝试了2条路线 - 首先创建了一个函数并使用了lapply:

MyFunction <- function(file){
  clean.file <- file[(file$pingtimehrs < 3.334), ]
  write.csv(clean.file, file=paste(file, "_cpt.csv", sep=""), row.names = F)
}

lapply(mylist, MyFunction)

第二次使用for循环:

for (file in mylist){
  clean.file <- file[(file$pingtimehrs < 3.334), ]
  write.csv(clean.file, file=paste(file, "_cpt.csv", sep=""), row.names = F)
}

我在两种情况下都得到了相同的错误,我怀疑这与编写输出有关,因为我可以创建clean.file(至少是第一个)并且它看起来正确。这是我得到的错误:

Error in file(file, ifelse(append, "a", "w")) : 
  invalid 'description' argument

In addition: Warning message:
In if (file == "") file <- stdout() else if (is.character(file)) { :
  the condition has length > 1 and only the first element will be used

有人可以发现我做错了吗?

1 个答案:

答案 0 :(得分:0)

试试这个:

for (i in seq_along(mylist)){
  clean.file <- mylist[[i]][(mylist[[i]]$pingtimehrs < 3.334), ]
  write.csv(clean.file, file=paste(names(mylist)[i], "cpt.csv", sep="_"), row.names = F)
}