2015-10-07 84 views
3

這工作調用`〜`與前綴約定

lm(mpg ~ cyl, mtcars) 

那麼,這是否:

lm(`~`(mpg, cyl), mtcars) 

但這並不:

lm(base::`~`(mpg, cyl), mtcars) 
Error in terms.formula(formula, data = data) : 
    argument is not a valid model 

爲什麼第三種情況會失敗?

回答

4

看來問題源於terms()函數。您從

terms(base::`~`(mpg,cyl)) 

得到同樣的錯誤,可以追溯到它確實

tildeSymbol = install("~"); 

if (!isLanguage(CAR(args)) || 
CAR(CAR(args)) != tildeSymbol || 
(length(CAR(args)) != 2 && length(CAR(args)) != 3)) 
error(_("argument is not a valid model")); 

所以它的字面尋找~,而不是一個~與命名空間爲前綴的C source for that functionCAR功能在這種情況下的行爲有這樣的

quote(`~`(mpg,cyl))[[1]] 
# `~` 
quote(base::`~`(mpg,cyl))[[1]] 
# base::`~`