【发布时间】:2014-05-15 12:43:24
【问题描述】:
我在 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
谁能发现我做错了什么?
【问题讨论】:
-
file似乎是一个data.frame?使用"_cpt.csv"粘贴 data.frame 不会产生好的文件名。 -
file是列表的每个元素,是的,是数据帧。那是问题吗?那我怎样才能得到file的名字呢?
标签: r list for-loop lapply write.table