为什么 `levels<-` 在命名参数的顺序不同的情况下表现不同?

3
R version 4.0.2 (2020-06-22) -- "Taking Off Again" -- x86_64-pc-linux-gnu
> `levels<-`(factor(c("a", "b")), c("c", "d"))
[1] c d
Levels: c d
> args(`levels<-`)
function (x, value) 
NULL
> `levels<-`(x = factor(c("a", "b")), value = c("c", "d"))
[1] c d
Levels: c d

目前为止一切顺利,然而:

> `levels<-`(value = c("c", "d"), x = factor(c("a", "b")))
[1] "c" "d"
attr(,"levels")
[1] a b
Levels: a b

我从一个本应该等价的调用中得到了不同的结果。发生了什么事情?


我想发布一个完整的答案,但文档对我来说不是完全清晰的。我认为这是因为levels<-是通过原始实现的,并且需要位置匹配。从您的最后一个示例中删除命名参数,您将获得相同的答案,这证明了我的假设。文件说明了一些需要位置匹配的示例,但我没有看到任何暗示这是其中之一的情况,否则我会提供答案。 https://cran.r-project.org/doc/manuals/r-release/R-ints.html#g_t_002eInternal-vs-_002ePrimitive - Dason
非常好的问题,顺便说一下。 - Dason
?levels: "替换函数是原始的"。来自R手册中的参数匹配:"[原始函数]通常忽略标签并进行位置匹配"。 - Henrik
@Henrik 很好的发现。我只关注了我链接到的手册部分,但我认为你的部分对这个问题进行了完整的解答。 - Dason
1个回答

1

levels<- 是通过原始函数实现的,需要位置匹配。从您最后一个示例中删除命名参数,您将得到相同的答案。

如果您检查 ?levels<-,您会看到:"替换函数是原始函数"。关于参数匹配的 R 手册(在这里找到)说,原始函数:"通常忽略标签并进行位置匹配"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接