2016-11-10 62 views
0

我是R新手,現在我很少被卡住。 所以,我寫的代碼看起來像這樣(這僅僅是個開始):循環替換整個代碼中的「x」與不同替換列表

# Load all EUR Files 
setwd(EUR) 
filenames <- list.files(path = EUR) 
MSCIeur <- do.call("rbind", lapply(filenames, read.csv, header = TRUE, sep = ";")) 

現在我需要運行該代碼多次爲不同的貨幣,所以我的問題是:有沒有一種方法來運行相同的代碼多次,第一次運行時,它會在下次用「USD」代替代碼中的所有「EUR」時使用「EUR」,或者是否需要複製粘貼整個代碼並僅替換所有「EUR」手動「美元」?

THX給任何人說花時間來閱讀:)

+0

看看'lapply '作爲你最好的選擇。 'for'循環可以工作,但可能效率較低,並且需要您更明確地存儲結果 –

+0

一種選擇是將整個事件轉換爲一個函數,其中'EUR'被替換爲'x'等一個正式的參數,然後你可以調用'lapply',在那裏你提供一個所有貨幣的向量以循環和函數的名字。 –

+0

@DanielAnderson這正是我也在想的,但我寫了自己的功能真的很難,但我試了一下:)謝謝! – LeroxXx

回答

0

嘗試for循環,可以設定不同的工作目錄和所有數據存儲的列表中:

curr.name <- gsub(x = list.dirs('.', recursive=FALSE), pattern = "./", replacement ="") 

curr <- paste(getwd(), curr.name, sep = "/") 

___________________________________________________________________________________________ 

MSCI <- list() 

for(i in 1:length(curr)){ 
    setwd(curr[i]) 
    filenames <- list.files(path = curr[i]) 
    MSCI[[i]] <- do.call("rbind", lapply(filenames, read.csv, header = TRUE, sep = ";")) 
} 

names(MSCI) <- curr.name 

___________________________________________________________________________________________ 

# Other way 

for(i in 1:length(curr)){ 
    setwd(curr[i]) 
    filenames <- list.files(path = curr[i]) 
    assign(curr.name[i],do.call("rbind", lapply(filenames, read.csv, header = TRUE, sep = ";"))) 
} 
+0

非常感謝!我很抱歉,但我沒有完全理解這個代碼..它以某種方式工作並創建了一個列表,其中其他貨幣的所有數據幀現在都在裏面..但是,我如何將此後再分解成單個數據框,因爲我不明白如何使用列表:/ – LeroxXx

+0

現在檢查,我編輯它以滿足您的要求。 –

+1

謝謝你現在就按我想要的方式工作! – LeroxXx