2012-12-18 38 views
12

我对使用R进行编程非常新,但我正尝试在多个文件中读取某个目录,并为它们分别指定一个唯一的名称。我正在使用R中的树木年代学程序库(包dpIR)和read.tucson函数读取文件。虽然我使用的是特定的包,但我认为我的问题相当一般:如何重新命名for循环中的数据帧

在循环中,我想通过连接"t"与每个单独的文件名创建文件。所以,如果我的目录中有一个名为"2503"的文件,我想在R中创建一个数据帧"t2503"。接下来,我想读取使用r.tucson函数到每个数据帧的数据。而不是将读入数据分配给数据框,我只是用数据覆盖连接。有人能帮我弄清楚我失踪的步骤吗?

这里是我尝试使用代码:

#set to appropriate directory 
setwd("C:/work") 

#get a list of files in the directory 
files <- list.files() 
numfiles <- length(files) 

for (i in 1:numfiles) 
{ 
    name<-paste("t",files[i],sep="") 
    name<-read.tucson(files[i],header=NULL) 
} 

回答

24

我想你给自己的答案是:你必须使用?assign

尝试类似的东西:

for (i in 1:5) { 
    assign(paste0("DF", i), data.frame(A=rnorm(10), B=rnorm(10))) 
} 

这遍历从1至5整数和创建五个data.frames “DF1” 到 “DF5”。对于你的榜样,你应该更换

name<-read.tucson(files[i],header=NULL) 

assign(name, read.tucson(files[i],header=NULL)) 

但是请注意,这name是R中基本功能,所以我会用另一种命名约定,或者只是跳过第一行:

assign(paste("t",files[i],sep=""), read.tucson(files[i],header=NULL)) 

我希望这是你在找什么。

+0

谢谢你的帮助!我尝试使用“assign”,正如你在这里概述的那样,它完全符合我的需要。谢谢! – user1913921

+5

警告:当你在一个函数中使用'assign'时,它的行为与在顶层使用它有所不同,你迟早需要'env = .GlobalEnv'。 – user1666959

+0

这是一个很好的建议。如果OP想要更多的信息,他可以看看[这里](http://stackoverflow.com/questions/9801208/assign-a-function-in-a-loop)。 –