如何在 r 中的公式中求值
How to evaluate in a formula in r
假设有一个公式:
f1 = as.formula(y~ var1 + var2 + var3)
f1
## y ~ var1 + var2 + var3
然后我想通过添加命名向量来更新公式 a
。
a = 'aaabbbccc'
f2 = update(f1, ~ . + a)
f2
## y ~ var1 + var2 + var3 + a
这不是我所期望的。我希望 a
在公式中进行评估。然后我试了这个:
f3 = update(f1, ~ . + get(a))
f3
## y ~ var1 + var2 + var3 + get(a)
同样失败。我期望的是:
y ~ var1 + var2 + var3 + aaabbbccc
任何帮助将不胜感激!
如果您在全球环境中评估这些陈述,那么您可以:
f <- y ~ var1 + var2 + var3
a <- as.name("aaabbbccc")
update(f, substitute(~ . + a, env = list(a = a)))
## y ~ var1 + var2 + var3 + aaabbbccc
否则,你可以这样做:
update(f, substitute(~ . + a, env = environment()))
## y ~ var1 + var2 + var3 + aaabbbccc
重要的是env
中a
的值是一个符号,不是字符串:as.name("aaabbbccc")
或quote(aaabbbccc)
,但不是 "aaabbbccc"
。
有点不直观,substitute(expr, env = .GlobalEnv)
等同于 substitute(expr, env = NULL)
。这是第一种情况下必须通过 list(a = a)
(或类似)的唯一原因。
我应该指出,在这种情况下,“从头开始”自己创建 substitute
结果并不太难:
update(f, call("~", call("+", quote(.), a)))
## y ~ var1 + var2 + var3 + aaabbbccc
这种方法的优点是与环境无关,因此,我可能会使用这种方法。
假设有一个公式:
f1 = as.formula(y~ var1 + var2 + var3)
f1
## y ~ var1 + var2 + var3
然后我想通过添加命名向量来更新公式 a
。
a = 'aaabbbccc'
f2 = update(f1, ~ . + a)
f2
## y ~ var1 + var2 + var3 + a
这不是我所期望的。我希望 a
在公式中进行评估。然后我试了这个:
f3 = update(f1, ~ . + get(a))
f3
## y ~ var1 + var2 + var3 + get(a)
同样失败。我期望的是:
y ~ var1 + var2 + var3 + aaabbbccc
任何帮助将不胜感激!
如果您在全球环境中评估这些陈述,那么您可以:
f <- y ~ var1 + var2 + var3
a <- as.name("aaabbbccc")
update(f, substitute(~ . + a, env = list(a = a)))
## y ~ var1 + var2 + var3 + aaabbbccc
否则,你可以这样做:
update(f, substitute(~ . + a, env = environment()))
## y ~ var1 + var2 + var3 + aaabbbccc
重要的是env
中a
的值是一个符号,不是字符串:as.name("aaabbbccc")
或quote(aaabbbccc)
,但不是 "aaabbbccc"
。
有点不直观,substitute(expr, env = .GlobalEnv)
等同于 substitute(expr, env = NULL)
。这是第一种情况下必须通过 list(a = a)
(或类似)的唯一原因。
我应该指出,在这种情况下,“从头开始”自己创建 substitute
结果并不太难:
update(f, call("~", call("+", quote(.), a)))
## y ~ var1 + var2 + var3 + aaabbbccc
这种方法的优点是与环境无关,因此,我可能会使用这种方法。