【发布时间】:2021-06-11 00:06:06
【问题描述】:
以summary(lm(wt~mpg,data=mtcars))->a. a$r 返回NULL,表示没有以r 开头的变量名。但是,a$residuals 和 a$r.squared 都给出了有效的输出,这与这个前提相矛盾。我对$ 运算符的误解是什么?我认为它总是部分匹配。
【问题讨论】:
标签: r dollar-sign
以summary(lm(wt~mpg,data=mtcars))->a. a$r 返回NULL,表示没有以r 开头的变量名。但是,a$residuals 和 a$r.squared 都给出了有效的输出,这与这个前提相矛盾。我对$ 运算符的误解是什么?我认为它总是部分匹配。
【问题讨论】:
标签: r dollar-sign
?pmatch 中有一条线索(在 ?$ 中顺便提及)。
nomatch:在不匹配的或乘以部分匹配位置返回的值。
在pmatch 的情况下是NA_integer_,但在$ 的情况下我猜它是NULL(我真的不想在R 源代码的深处进行确认)。
更具体地说,"Indexing by vectors" section of the R language manual 说
如果
x不包含名为“aa”的组件并且“aabb”是唯一具有前缀“aa”的名称,x$aa将匹配x$aabb。
它没有明确说明否则会返回 NULL,但这通常是在没有匹配项时得到的结果(例如 a$junk)。
在更抽象的层面上,当存在多个部分匹配时,很难想出一种不令人惊讶/有原则/不危险的方法来解决歧义:选择第一个字母顺序的匹配项(可能会因语言环境等而有所不同) ?选择数字索引最低的那个?
【讨论】:
NULL 是一种明智的行为,因为很难想出更好的选择