我估计了几个模型(a,b),我想使用单个数据帧(df)计算每个模型的预测概率,并将每个模型的预测概率存储为该数据帧中的新变量。例如:
a <- lm(y ~ z, df) # estimate model a
b <- glm(w ~ x, df) # estimate model b
models <- c("a","b") # create vector of model objects
for (i in models) {
assign(
paste("df$", i, sep = ""),
predict(i, df)
)}
我已经尝试了上述但是接收到错误“没有适用于'预测'的方法应用于类”字符“”的对象,最后一个单词改变,因为我改变了预测对象的类,例如预测(as.numeric(i)中,DF)。
有什么想法吗?理想情况下,我也可以对此进行矢量化。
答案 0 :(得分:1)
您应该很少使用assign()
,$
不应与变量名一起使用。 [[]]
运算符比$
更适合动态子集。如果你只是制作一个列表,而不仅仅是他们的名字,那就更容易了。这是一个例子
df<-data.frame(x=runif(30), y=runif(30), w=runif(30), z=runif(30))
a <- lm(y ~ z, df) # estimate model a
b <- lm(w ~ x, df) # estimate model b
models <- list(a=a,b=b) # create vector of model objects
# 1) for loop
for (m in names(models)) {
df[[m]] <- predict(models[[m]], df)
}
或者不是for循环,您可以使用Map
生成所有值,然后在cdbind
后追加
# 2) Map/cbind
df <- cbind(df, Map(function(m) predict(m,df), models))