0

我在 4 个不同的位置有 4 个不同的 .csv 文件,我想使用相同的标准对它们进行子集化。然后我想为它们中的每一个以“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

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

4

1 回答 1

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)
}
于 2014-05-15T13:03:48.070 回答