我正在尝试为lme4的predict
模型编写lmer
样式函数。我们的想法是,预测函数将适用于包含expand.grid
生成的因子和变量级别的数据框:
level_df <- expand.grid(a=1:3, b=4:6)
我正处于可以获得计算给定效果/交互作为字符串的公式的地步:
formula_string <- "a * b + 3"
但是我能够将该公式应用于关卡数据框的唯一方法(在这种情况下,评估a
和b
的每个值的公式)是通过一些相当自由的方式可能危险地使用assign
和eval
之类的东西:
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
)
是否有更安全,更快捷的方式在字符串和符号/变量名之间进行转换?
答案 0 :(得分:1)
您可以使用data.frame
作为eval
所以
eval(parse(text = formula_string), envir = level_df)
应该很好地工作,因为它会在level_df
内查找(第一个)任何变量。