2014-01-26 110 views
-1

我創建了一個循環,通過一組文件進行迭代,並指定在文件中的數據給一個變量對象未找到[R

for(i in 1:8){ 
    infile <-paste("coauthor", i,".csv",sep="") 
    coa[i]<-read.csv(infile,header = TRUE, sep="\t") 
} 

然而,我不斷收到錯誤交替

Error in read.table(file = file, header = header, sep = sep, quote = quote, : 
    object 'infile' not found 

並更頻繁地

Error in paste("coauthor", i, ".csv", sep = "") : object 'i' not found 

我在這裏錯過了什麼?

+0

你的文件存儲在哪裏,'getwd()'的輸出是什麼? – Fernando

+0

對不起,在執行此命令之前,我將wd設置爲正確的位置,就像'setwd(「D:/ n4jbatch」) getwd()'用getwd()生成正確的wd –

+0

您會得到兩個非常不同的錯誤,我認爲需要更多的信息來解決這個問題。 – Fernando

回答

2

首先,不需要for循環。其次,如果你這樣做,你需要預先定義coa。第三,您必須適當地使用setwd(...)read.csv(...)才能找到這些文件。

setwd("<directory with coauther files...>") 
# this just creates a bunch of files so we can read them back in... 
df <- data.frame(x=1:3, y=4:6, z=7:9) 
lapply(1:5, function(i)write.csv(df,paste0("coauthor",i,".csv"))) 

# this is the code that reads them in. This is all you need. 
coa <- lapply(1:5, function(i)read.csv(paste0("coauthor",i,".csv"))) 

注意coa現在是具有5個元素,每個包含的文件中的一個的內容的列表。

coa[1] 
# [[1]] 
# X x y z 
# 1 1 1 4 7 
# 2 2 2 5 8 
# 3 3 3 6 9 
+0

我將預先分配更改爲預定義。聲明「不需要」意味着循環不是必需的,這是絕對正確的。 – jlhoward

+0

'不需要'的好處 –

+0

在這個特定的實例中,我想從文件中讀取數據到數據框中,對數據框執行一些修改,然後將修改後的框架綁定到現有的數據框上。您對預定義的回答確實有幫助,您的解決方案可能適用於我的更廣泛的問題,但我無法說清楚。 –