0

我正在尝试predict为 lme4 的lmer模型编写样式函数。这个想法是预测函数将在包含因子和变量级别的数据帧上工作,这种数据帧由以下产生expand.grid

level_df <- expand.grid(a=1:3, b=4:6)

我现在可以得到将给定效果/交互计算为字符串的公式:

formula_string <- "a * b + 3"

但是,我能够将该公式应用于级别数据框的唯一方法(在这种情况下,评估 and 的每个值的公式a)是通过一些非常自由且可能危险的使用和b之类的东西:assigneval

EffectFunction <- function(df_row, formula_string) {
  l_cols <- colnames(df_row)
  for (i in 1:ncol(df_row)) {
    assign(l_cols[i], df_row[1, i])
  }
  parsed <- parse(text=formula_string)
  df_row$effect_val <- eval(parsed)
  return(df_row)
}

pred_results <- adply(
  level_df,
  1,
  formula_string=formula_string,
  EffectFunction
)

是否有更安全、更快捷的方式在字符串和符号/变量名之间进行转换?

4

1 回答 1

1

您可以使用 adata.frame 作为 envir 参数eval

所以

 eval(parse(text = formula_string), envir = level_df)

应该可以很好地工作,因为它会(首先)在其中level_df查找任何变量。

于 2013-02-06T01:10:22.790 回答