我在列表中有dataframe,需要相对于阈值进行过滤,然后将它们导出为csv
。是的,我编写了一个简单的函数来实现这一点,但效率不高(我的意思是效率不高,因为我还必须检查导出的文件是否存在),所以我必须避免覆盖文件。但是,在我的以下实现中,我想检查文件夹,如果已经导出了相同的文件,则会引发错误。如何查看文件夹中现有文件的模式?如何避免将文件覆盖到同一文件夹中?任何人都可以指出我如何完成这项工作?有什么想法改进我目前的实施?
迷你示例:
surfList <- list(
heck = data.frame( L1=seq(1, by=6, len=20), L2=seq(4, by=6, len=20), score=sample(30, 20)),
kev = data.frame( L1=seq(3, by=9, len=15), L2=seq(6, by=9, len=15), score=sample(28, 15)),
leo = data.frame( L1=seq(6, by=8, len=18), L2=seq(11, by=8, len=18), score=sample(22, 18))
)
这是我的实施:
splitter <- function(inputlist,
threshold = 14,
tab ="noise",
dest.dir = tempdir(),
overwrite=FALSE) {
if(!dir.exists(dest.dir)) {
dir.create(file.path(dest.dir))
setwd(file.path(dest.dir))
}
if (overwrite) {
for(i in seq_along(inputlist)) {
w <- inputlist[[i]]
nm <- names(inputlist)[i]
drop <- w[w$score >= threshold]
write.csv(drop, sprintf("%s/%s.%s.csv", dest.dir, nm, tab))
}
} else {
# I want to check dest.dir whether previous exported files exist or not
stop(paste("prevent overwriting files; please delete existing file:", dest.dir))
}
}
在此实现中,缺少检查文件夹中已导出的文件。如何使我的实施更加高效和简洁?任何的想法?在此先感谢:)
修改:
让我们想象~/
中已存在csv文件列表,但我不知道这些文件已经导出。我假设我忘记了我的第一步,所以我想检查文件夹。我怎样才能做到这一点?如何避免将相同的文件覆盖到文件夹中?任何想法都基于我的实现?