與R工作組,這是一個真正的跆拳道:爲什麼as.formula只能在()內部的lm()內工作?
R> f_string <- 'Sepal.Length ~ Sepal.Width'
R> l <- with(iris, lm(as.formula(f_string))) # works fine
R> f_formula <- as.formula(f_string)
R> l <- with(iris, lm(f_formula))
Error in eval(expr, envir, enclos) : object 'Sepal.Length' not found
爲什麼as.formula必須是lm()
調用之內?我明白了,這是關於哪些事情環境評估中的一個問題,因爲這個工程:
R> f_formula <- with(iris, as.formula(f_string))
R> lm(f_formula)
,但我有真正的麻煩纏繞我的頭周圍爲什麼一個作品,另一個沒有。
> f_formula <- as.formula(f_string)
> l <- with(iris, lm(f_formula))
Error in eval(expr, envir, enclos) : object 'Sepal.Length' not found
> str(f_formula)
Class 'formula' length 3 Sepal.Length ~ Sepal.Width
..- attr(*, ".Environment")=<environment: R_GlobalEnv>
而且也沒有Sepal.Length
有:因爲您要建立與全球環境的公式
您可能希望清理代碼並使其完全可重現。然而,看着'as.formula'的代碼我也不明白。我認爲'as.formula(f_string,env = basenev())'或'as.formula(f_string,env = parent.frame())'應該可以工作(我期望前者),但只有當'env'是'missing'它的工作原理。 (我希望你知道你不應該在這裏使用''''lm'和朋友有一個'data'參數是有原因的) – Roland 2014-09-04 07:52:19
@Roland哎呀,不小心在那裏留下了一些東西...... – naught101 2014-09-04 08:03:21
@Roland :關於'data ='的爭論也是完全正確的。它讓'lm()'把字符串變好,所以我可以避免整個問題。儘管如此,它很有趣,作爲一個compsci初學者:) – naught101 2014-09-04 08:12:01