我想在两个列表中创建一个训练和测试10个独立数据集的函数。以下是清单:
blend_30_d<-list(desktop_30_1, desktop_30_2, desktop_30_3, desktop_30_4, desktop_30_5, desktop_30_6, desktop_30_7, desktop_30_8, desktop_30_9, desktop_30_10)
blend_30_td<-list(desktop_30_t1, desktop_30_t2, desktop_30_t3, desktop_30_t4, desktop_30_t5, desktop_30_t6, desktop_30_t7, desktop_30_t8, desktop_30_t9, desktop_30_t10)
每个数据集的名称为:
[1]“date”“Wkday”“Imps”“Clicks”“Total_Cost”“Units”
[7]“一月”“二月”“三月”“四月”“五月”“六月”
[13]“七月”“八月”“九月”“十月”“十一月”“十二月”
[19]“星期一”“星期二”“星期三”“星期四”“星期五”“星期六”
[25]“星期天”“Vday”“Tgiving”“Xmas”“XmasE”“NYE”
[31]“NYD”“July4”“Labor”“Memorial”“Mob_App_Launch”“Auto_Approve_Launch”
我已经构建了以下功能 - 我希望blend_30_d [1]能够针对blend_30_td [1]进行测试。
d_cost <- function(train, test){
####Run regression on training
q<-lm(Total_Cost ~ . -date - Wkday - Imps - Clicks + poly(date, 2), data=train)
####Predict values into test set
test_cost_d <- predict.lm(q, x=test)
####Calculate R^2 between predicted vs. actual values
z<-(cor(test_cost_d, test$Total_Cost))^2
}
d_cost(blend_30_d, blend_30_td)
我收到以下错误: terms.formula(formula,data = data)中的错误: 使用'。'
在数据框中复制名称'date'我不确定这是两个列表的正确方法......有什么建议吗?谢谢!
答案 0 :(得分:0)
您的d_cost
功能可以构建两个数据帧,一个用于测试,另一个用于训练。您通过传递两个数据框列表来尝试调用它。您一次为一对数据框构建了函数,因此需要给它一对,而不是两对数据列。尝试这样的事情:
z = rep(NA, length(blend_30_d)
for (i in seq_along(blend_30_d) {
z[i] = d_cost(blend_30_d[[i]], blend_30_td[[i]])
}
答案 1 :(得分:0)
我认为您可能需要添加一个循环:
for(i in 1:10){
d_cost(train[[i]], test[[i]])
}