我知道这个问题之前已经提出过(<my code> 中的错误:'closure' 类型的对象不是子集)。但我无法理解它。
这是我使用的包以及我如何准备数据
library(mlogit)
data(CollegeDistance, package="AER")
Data <- CollegeDistance
Data$Dist[Data$distance<0.4] <- 1
Data$Dist[Data$distance<1 & Data$distance>=0.4] <- 2
Data$Dist[Data$distance<2.5 & Data$distance>=1] <- 3
Data$Dist[Data$distance>=2.5] <- 4
现在,当我定义一个mlogit
对象并将其用于预测时,我得到了那个错误。
Formula <- paste('Dist ~', paste('1|',paste(c("urban", "unemp", "tuition"), collapse = " + "),'|1'))
Model <- mlogit(as.formula(Formula), Data, shape='wide', choice='Dist')
Predict <- predict(Model, newdata=mlogit.data(Data, shape='wide', choice='Dist'), returnData=FALSE)
有趣的是,如果我替换Formula
为formula
then 它可以工作!
更新
mlogit
我在函数中使用时遇到了这个问题。如果你能告诉我一个摆脱它的方法,我真的很感激。
modelmaker <- function(variables){
Formula <- paste('Dist ~', paste('1|',paste(variables, collapse = " + "),'|1'))
MODEL <- mlogit(as.formula(Formula), Data, shape='wide', choice='Dist')
return(MODEL)
}
Model <- modelmaker(c("urban", "unemp", "tuition"))
Predict <- predict(Model, newdata=mlogit.data(Data, shape='wide', choice='Dist'), returnData=FALSE)
formula
即使避免使用or也无法解决这个问题Formula
。如果将其更改为XXX
错误将是
object 'XXX' not found