使用do.call()

时间:2016-11-09 22:41:38

标签: r

下面是我的脚本的修剪版本。我希望我的函数会为每个循环迭代返回一个列表,这样我就可以将所有列表重新组合以形成一个新的数据框,但是当我执行这个脚本时,我不断收到错误:

do.call(“rbind”,listofdfs):找不到对象'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(dates))有效,但只给出了33。

再次感谢您的帮助。

1 个答案:

答案 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))