2016-06-13 48 views
-1

我正在使用列表運行循環函數,並且遇到了一個問題,因爲R在循環中覆蓋數據,並且只顯示最後一個循環的結果。我嘗試了rbind,但它沒有用於我的目的,因爲我想將每個列表組件保存在不同的數據框中(它們是時間序列數據)。任何幫助,將不勝感激。如何在運行循環功能時創建不同的數據幀來存儲數據? (我不想覆蓋)

編輯: 這裏是我的代碼的縮短版本。據我所知,當他們循環瀏覽系列時,來自不同貨幣的每個數據框應該保存爲相應的貨幣名稱,但數據框保存爲「curr」而非貨幣名稱本身,並且只包含USDGBP中的數據集。

for (curr in list("USDEUR Curncy","USDJPY Curncy","USDGBP Curncy"){ 
    c <- bdh(c(curr), c("PX_LAST", "MOV_AVG_200D"), 
      start.date=Sys.Date()-365*yr, 
      options = c("periodicitySelection" = "DAILY")) 
    curr <-data.frame(c) 
} 
+0

這如果您提供一些示例數據和您遇到問題的代碼,則會更容易提供幫助。 – ytk

+0

感謝您的評論。我附上了樣本數據。 – sh2657

+1

在循環之前添加'curr < - vector(「list」,3)',循環遍歷索引變量'i'而不是'curr',然後將'curr < - ...'改爲'curr [[i] ]'< - ...'。 – joran

回答

2

您可以使用assign,它將name分配給對象。

例如,

# creates an object "x" of value 2 
assign("x", 2) 
> x 
[1] 2 

在循環的情況下,你可以嘗試:

for (curr in list("USDEUR Curncy","USDJPY Curncy","USDGBP Curncy")){ 
    c <- bdh(c(curr), c("PX_LAST", "MOV_AVG_200D"), 
      start.date=Sys.Date()-365*yr, 
      options = c("periodicitySelection" = "DAILY")) 
    assign(paste0(curr), as.data.frame(c)) 
    } 

這將在您的全球環境中創建的每個data.frame爲不同的對象

+0

謝謝!這正是我想要的(並且它的工作原理)。我搜索了很多這個論壇來解決這個問題,但我從來沒有見過這個功能。再次感謝。 – sh2657

相關問題