如何将公式对象传递给DirichReg(函数设置)

如何将公式对象传递给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

我试图使用R中的DirichReg包将公式对象传递给Dirichlet回归。如下图所示,该包似乎无法接受此格式的公式,但文档中没有任何内容说明此限制。此工作流的原因是,我正在尝试设置一个交叉验证函数,该函数可以应用于不同公式(即具有不同协变量)的列表,并返回样本外预测能力,以帮助选择模型

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)