2015-02-05 69 views
0

我做了一個循環,將函數的結果賦值給新創建的變量。之後,該變量用於創建另一個。 這第二步不能產生預期的結果。R新變量賦值

library(stringr) 
for (i in 1:length(Ids)){ 
    nam <- paste("data", Ids[i], sep = "_") 
    assign(nam, GetReportData(query, token,paginate_query = F)) 
    newvar=paste(nam,"contentid",sep="$") 
    originStr=paste(nam,"pagePath",sep="$") 
    assign(newvar,str_extract(originStr,"&id=[0-9]+")) 
} 
+0

你究竟在做什麼?使用'assign()'通常是沒有必要的。將相關值存儲在列表中而非環境中的單獨變量幾乎總是更好。另外,您不能使用幫助頁面中描述的名稱具有「$」的分配:「分配不分配分配方法,因此不能用於設置向量,名稱,屬性等的元素」。 – MrFlick 2015-02-05 21:13:43

回答

3

不要創建一堆變量,將相關值存儲在命名列表中,以便於檢索它們。你沒有提供任何輸入來測試,但我猜這是做同樣的事情。

library(stringr) 
mydata <- lapply(1:length(Ids), function(i) { 
    dd <- GetReportData(query, token,paginate_query = F)) 
    dd$contentid <- str_extract(d$pagePath,"&id=[0-9]+")) 
    dd 
}) 

這將返回一個data.frames列表。你可以用mydata[[1]]mydata[[2]],訪問它們等,而不是data_1data_2

如果你絕對堅持打造一組變量,只要確保做一個實際的對象上所有的轉換,然後保存該對象當你完成了。如幫助頁面中所述,您永遠不能使用具有$[的名稱進行分配:「assign不分配分配方法,因此不能用於設置向量,名稱,屬性等元素。」例如

for(i in 1:length(Ids)) { 
    dd <- GetReportData(query, token,paginate_query = F)) 
    dd$contentid <- str_extract(d$pagePath,"&id=[0-9]+")) 
    assign(paste("data",i,sep="_"), dd) 
}