预测()+ assign()循环变量

时间:2016-02-25 04:18:03

标签: r loops

我估计了几个模型(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)。

有什么想法吗?理想情况下,我也可以对此进行矢量化。

1 个答案:

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