Predict 样式函数:在字符串和符号之间转换

Predict-style function: converting between strings and symbols

提问人:Marius 提问时间:2/6/2013 更新时间:2/6/2013 访问量:93

问:

我正在尝试为 lme4 的模型编写一个样式函数。这个想法是,predict函数将在包含因子和变量水平的数据帧上工作,这些数据帧由以下方式产生:predictlmerexpand.grid

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

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

formula_string <- "a * b + 3"

但是,我能够将该公式应用于级别数据帧的唯一方法(在本例中,评估 和 的每个值的公式)是通过一些非常自由且可能危险的东西使用,例如 和 :abassigneval

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
)

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

r

评论

0赞 mnel 2/6/2013
为什么循环不起作用?foreval(parse(text = formula_string), level_df)
0赞 Marius 2/6/2013
啊,所以你可以使用数据框作为环境吗?这正是我一直在寻找的那种提示,将其添加为答案,我会接受的。

答:

1赞 mnel 2/6/2013 #1

您可以使用 a 作为 envir 参数data.frameeval

所以

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

应该工作得很好,因为它会(首先)在任何变量中看起来。level_df