我只想在R中使用10個文件。對於每個我想計算的東西。 Exp。文件: stat1_pwg1.out stat23_pwg2.out .. stat45_pwg10.outR用for循環讀取文件
我試試這個:
for (i in 1:10){
Data=paste("../XYZ/*_pwg",i,".out",sep="")
line=read.table(Data,head=T)
}
但它不工作?任何後果?
我只想在R中使用10個文件。對於每個我想計算的東西。 Exp。文件: stat1_pwg1.out stat23_pwg2.out .. stat45_pwg10.outR用for循環讀取文件
我試試這個:
for (i in 1:10){
Data=paste("../XYZ/*_pwg",i,".out",sep="")
line=read.table(Data,head=T)
}
但它不工作?任何後果?
我懷疑你的問題來自通配符*
。更好的方法是使用dir
首先存儲文件名,然後找到你想要的文件名。
您也可以使用apply
家庭的功能之一,消除了環路完全。
非常感謝你! – Jasmine
不客氣。由於您是新手,因此我會提供以下建議:如果回答了問題,請點擊小複選框將其標記爲已回答。這將使問題不被列入「未回答」的問題中,並有助於保持SO數據庫的整潔。 –
@ gsk3:記得在你的正則表達式中逃避'.'。 –
關於你的代碼的一些事情。
paste
被矢量化,所以你可以把它帶出循環。
paste("../XYZ/*_pwg", 1:10, ".out", sep = "")
(雖然你會看到一個時刻,你實際上並不需要使用paste
在所有。)
read.table
不會接受通配符;它需要一個完全匹配的文件名。
與其試圖構建文件名的向量,您可能更好地使用dir
來查找目錄中存在的文件,並通過合適的命名方案進行過濾。
要過濾文件,請在模式參數中使用正則表達式。您可以使用glob2rx
將通配符轉換爲正則表達式。
file_names <- dir("../XYZ", pattern = glob2rx("stat*_pwg*.out"))
data_list <- lapply(filenames, read.table, header = TRUE)
一個稍微具體的配合,其中僅通配符比什麼都匹配的是數字,你需要直接使用正則表達式。
file_names <- dir("../XYZ", pattern = "^stat[[:digit:]]+_pwg[[:digit:]]+\\.out$")
files <- dir(pattern="*Rip1_*")
files
for (F in files){ assign(F , Readfunc(F))}
雖然這段代碼片段是受歡迎的,並且可能會提供一些幫助,但它會[如果包含解釋](/ meta.stackexchange.com/q/114762)* how *和* why *會大大改進,這將解決問題。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –
這會使讀取文件變得非常不方便 –
神似http://stackoverflow.com/q/5758084/602276和http://stackoverflow.com/q/3764292/602276 – Andrie