下面是我的脚本的修剪版本。我希望我的函数会为每个循环迭代返回一个列表,这样我就可以将所有列表重新组合以形成一个新的数据框,但是当我执行这个脚本时,我不断收到错误:
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。
再次感谢您的帮助。
答案 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))