如何将公式对象传递给DirichReg(函数设置)
我试图使用R中的DirichReg包将公式对象传递给Dirichlet回归。如下图所示,该包似乎无法接受此格式的公式,但文档中没有任何内容说明此限制。此工作流的原因是,我正在尝试设置一个交叉验证函数,该函数可以应用于不同公式(即具有不同协变量)的列表,并返回样本外预测能力,以帮助选择模型如何将公式对象传递给DirichReg(函数设置),r,dirichlet,R,Dirichlet,我试图使用R中的DirichReg包将公式对象传递给Dirichlet回归。如下图所示,该包似乎无法接受此格式的公式,但文档中没有任何内容说明此限制。此工作流的原因是,我正在尝试设置一个交叉验证函数,该函数可以应用于不同公式(即具有不同协变量)的列表,并返回样本外预测能力,以帮助选择模型 library (DirichletReg) df <- ArcticLake # plug-in your data here df$Y <- DR_data(df[,1:3]) # pre
library (DirichletReg)
df <- ArcticLake # plug-in your data here
df$Y <- DR_data(df[,1:3]) # prepare the Y's
Warning in DR_data(df[, 1:3]) :
not all rows sum up to 1 => normalization forced
formula <- reformulate(termlabels = "depth", response="Y")
mod <- DirichReg(formula, df)
Error: object of type 'symbol' is not subsettable
Error during wrapup:
mod <- DirichReg(Y~depth, df)
str(Y~depth)
Class 'formula' language Y ~ depth
..- attr(*, ".Environment")=<environment: R_GlobalEnv>
str(formula)
Class 'formula' language Y ~ depth
..- attr(*, ".Environment")=<environment: R_GlobalEnv>
formula <- as.formula("Y~depth")
mod <- DirichReg(formula, df)
Error: object of type 'symbol' is not subsettable
Error during wrapup:
您可以尝试传递字符,然后稍后使用as.formula将其转换为公式
as.formula("z ~ x + y")
@Smiley Bcc可能暗示了这一点,但似乎您必须从
DirichletReg()
函数中调用as.formula()
。根据以上示例数据:
> f <- as.formula('Y~depth')
> mod <- DirichReg(f, df)
Error: object of type 'symbol' is not subsettable
> f <- 'Y~depth'
> mod <- DirichReg(as.formula(f), df)
>f mod f mod此外,如果试图在函数中使用@dmp的变通方法,则需要将公式对象指定给全局环境
见问题:
library (DirichletReg)
df <- ArcticLake # plug-in your data here
df$Y <- DR_data(df[,1:3]) # prepare the Y's
f <- reformulate(termlabels = "depth", response="Y")
mod <- DirichReg(f %>% as.formula, df)
runReg <- function(this.formula, data) {
message(this.formula)
mod <- DirichReg(as.formula(this.formula), data)
return(mod)
}
res <- runReg("Y~depth", df)
库(DirichletReg)
df感谢您的建议,但不幸的是as.formula和reformate的结果相同-请参阅编辑
> formula <- 'Y~depth'
> mod <- DirichReg(as.formula(formula), df)
Error: object of type 'closure' is not subsettable
library (DirichletReg)
df <- ArcticLake # plug-in your data here
df$Y <- DR_data(df[,1:3]) # prepare the Y's
f <- reformulate(termlabels = "depth", response="Y")
mod <- DirichReg(f %>% as.formula, df)
runReg <- function(this.formula, data) {
message(this.formula)
mod <- DirichReg(as.formula(this.formula), data)
return(mod)
}
res <- runReg("Y~depth", df)
runReg <- function(this.formula, data) {
message(this.formula)
f <<- this.formula
mod <- DirichReg(as.formula(f), data)
return(mod)
}
res <- runReg("Y~depth", df)