2016-11-09 89 views
0

下面是我的腳本的修剪版本。我希望我的函數將每個循環迭代返回給我一個列表,以便我可以刪除所有列表以形成新的數據框,但是當我執行此腳本時,我不斷收到錯誤:從函數內返回數據幀的列表,以使用do.call()應用rbind()

做的。 call(「rbind」,listofdfs):object'listofdfs'找不到

謝謝大家的幫助。

library(DBI) 
library(RPostgreSQL) 

drv<- dbDriver("MyDataBase") 
con<-dbConnect(drv,dbname="DB_Name", 
      host="DB_Location",port=number,user="MyName",password= "Password") 


dates <- seq(as.Date(as.character(Sys.Date() - 33)), as.Date(as.character(Sys.Date() - 1)), by=1) 


my_function<-function(dates){ 

listofdfs<-list() 

for(i in 1:length(dates){ 

data<-dbGetQuery(con, sprintf("select X,Y,Z from TABLE where date>=date('%s')", dates[i]) 


data$newColumn<-mean(data$X) 

listofdfs[[i]]<-data 
} 

return(listofdfs) 

} 

df<-do.call("rbind", listofdfs) 

我有一個小簡化示例指,請從上面

my_list_function<-function(dates){ 

for(i in 1:length(dates)) 
{ 

my_list<-list() 

my_list[[i]]<-i 

} 
return(my_list) } 

k<-do.call(rbind,my_list(dates)) 
View(k) 

現在運行 do.call(rbind,my_list(日期))日期可變返回錯誤找不到函數「my_list」並正在運行do.call(rbind,my_list_function(日期))工作但只給33。

再次感謝您的幫助。

+0

這樣不是需要成爲'df <-do.call(「rbind」,listofdfs(日期))'? –

+0

@ 42 -...這會拋出錯誤*無法找到函數listofdfs * ... –

+0

應該是該函數的名稱。 –

回答

1

listofdfs是在您的函數中聲明的變量。因此它沒有在其身體外界定。

df<-do.call("rbind", my_function(dates)) 

同樣在讓你小例子的工作:

,但因爲它是由函數返回的,你可以通過調用函數本身訪問

my_list_function<-function(dates){ 
    my_list<-list() 
    for(i in 1:length(dates)) 
    { 
    my_list[[i]]<-i 
    } 
    return(my_list) 
} 

k<-do.call(rbind,my_list_function(dates)) 
+0

@HubertL ....這是工作,但這返回列表的最後一個值...也不do.call接受列表作爲第二個參數? –

+0

@HubertL ...感謝您解釋在do.call中傳遞函數的原因,但我仍然試圖理解爲什麼我只獲取最後一個值,即長度(日期),而不是用1:33中的值列出。 –

+0

如果你從我的文章複製代碼,你應該得到從1到33的數字列表,就像我做的那樣 – HubertL