2012-12-18 83 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)。 –