r - 使用前缀约定调用 `~`

标签 r

这行得通

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/

相关文章:

r - 匹配来自两个数据帧的文本向量并返回第三个向量的总和

mysql - 如何在MySQL中填写两个日期之间的所有时间段?

r - 如何预定义列表的长度

r - 如何在 Terra::Predict 中格式化 'const' 参数?

在echarts4r中删除千位逗号

r - 连续分类数据序列

r - 如何比较r中管道中的行数?

r - 使用 lapply 处理列表内容

r - 对 lmer 和 glmer 模型使用 aictab()

r - 从两个向量中采样唯一对