我有一个存储在列表 c 中的数据框列表。我想找到列之间的差异,例如(actual-pred1.a,actual-pred2.a,依此类推)列表中的每个数据帧。我在列表中有100个数据帧,我必须这样做。我在下面编写了以下示例数据和代码来查找它。
a<-data.frame(pred1.a=c(4,3,32,2,3), pred2.a=c(5,3,2,6,22),pred3.a=c(3,2,7,1,23),actual=c(8,9,2,6,21))
b<-data.frame(pred1.b=c(3,6,6,2,5), pred2.b=c(2,7,8,4,23),pred3.b=c(1,4,7,3,22),actual=c(9,2,1,3,25))
c<-list(a,b)
i3<-1:3
error <- list()
for (iter in 1:length(c)){
for (i in seq_along(i3)){
error<-sqrt(mean((c[[iter]][4]-c[[iter]][i])^2))
}
}
我想要错误值,例如错误[[1]] [1](dataframe1的错误值:actual-pred1.a),错误[[1]] [2],错误[[1]] [3] ,错误[[2]] [1]。
有没有办法取消上市?因为我有一个包含近100个数据帧的列表。
答案 0 :(得分:1)
对@ RichScriven进行一些细微更改的建议很容易在单独的列中获取错误,保持原件不变:
df_list <- list(a,b)
lapply(df_list, function(df) {
errors = df$actual - df[1:3]
colnames(errors) = paste0("err_", colnames(df)[1:3])
cbind(df, errors)
}
)
输出:
[[1]]
pred1.a pred2.a pred3.a actual err_pred1.a err_pred2.a err_pred3.a
1 4 5 3 8 4 3 5
2 3 3 2 9 6 6 7
3 32 2 7 2 -30 0 -5
4 2 6 1 6 4 0 5
5 3 22 23 21 18 -1 -2
[[2]]
pred1.b pred2.b pred3.b actual err_pred1.b err_pred2.b err_pred3.b
1 3 2 1 9 6 7 8
2 6 7 4 2 -4 -5 -2
3 6 8 7 1 -5 -7 -6
4 2 4 3 3 1 -1 0
5 5 23 22 25 20 2 3
如上所述c
不是变量的好名字,所以我在这里重命名了。