这行得通
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
为什么第三种情况会失败?
最佳答案
看来问题出在 terms()
函数上。你从
terms(base::`~`(mpg,cyl))
这可以追溯到 C source for that function哪个
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"));
所以它实际上是在寻找一个~
,而不是一个以命名空间为前缀的~
。 CAR
函数在这种情况下表现得有点像这样
quote(`~`(mpg,cyl))[[1]]
# `~`
quote(base::`~`(mpg,cyl))[[1]]
# base::`~`
关于r - 使用前缀约定调用 `~`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32982595/