我想编写一个循环,将来自不同文件夹的txt文件转换为RData格式。这些文件具有相同的名称,因此我想有条件地重命名它们并将它们保存到一个文件夹中。循环完成了这项工作,但它为所有文件保存了相同的数据框名称。有更好的方法吗?
for (i in (sprintf("%02d", (seq(from=8, to=15))))) {
for (j in 1:4){
load <- paste0("C:/Users/User/Desktop/data/20", i, "/20", i, ".", j, "kw/data.txt")
save <- paste0("data.20", i, ".", j, "kw")
save <- read.table(load, sep="|", header=T)
save(save, file=paste0("./data-r/data.20", i, ".", j, "kw.RData"))
}}
答案 0 :(得分:0)
我认为您的代码的以下调整应该可以解决问题。
for (i in (sprintf("%02d", (seq(from=8, to=15))))) {
for (j in 1:4){
load <- paste0("C:/Users/User/Desktop/data/20", i, "/20", i, ".", j, "kw/data.txt")
save <- paste0("data.20", i, ".", j, "kw")
assign(x = save,
value = read.table(load, sep="|", header=T))
eval(bquote(
save(.(as.name(save)),
file=paste0("./data-r/data.20", i, ".", j, "kw.RData"))
))
eval(bquote(rm(.(as.name(save)))))
}}
assign
- 函数可确保将文件内容分配给save
- 对象的当前值。
eval
+ bquote
+ .()
+ as.name
构造用于创建(和评估)对save
- 函数的调用,以便它不保存您的save
- 对象,而是保存名称存储在save
中的对象。
最后使用rm
,以避免工作区(和内存绑定)与文件中的内容混乱。