预测式功能:在字符串和符号之间进行转换

时间:2013-02-06 00:47:57

标签: r

我正在尝试为lme4的predict模型编写lmer样式函数。我们的想法是,预测函数将适用于包含expand.grid生成的因子和变量级别的数据框:

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

我正处于可以获得计算给定效果/交互作为字符串的公式的地步:

formula_string <- "a * b + 3"

但是我能够将该公式应用于关卡数据框的唯一方法(在这种情况下,评估ab的每个值的公式)是通过一些相当自由的方式可能危险地使用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
)

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

1 个答案:

答案 0 :(得分:1)

您可以使用data.frame作为eval

的envir参数

所以

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

应该很好地工作,因为它会在level_df内查找(第一个)任何变量。