gpt4 book ai didi

r - 关于 R,在定义替换函数时,参数是否必须命名为/类似 "x"和 "value"?

转载 作者:行者123 更新时间:2023-12-04 10:53:39 24 4
gpt4 key购买 nike

我所说的“替换函数”是指在这个线程中提到的那些 What are Replacement Functions in R? , 看起来像 'length<-'(x, value) .当我使用这些函数时,我遇到了一些奇怪的事情。似乎替换函数仅在根据特定规则命名变量时才起作用。

这是我的代码:

a <- c(1,2,3)

我将尝试更改 a 的第一个元素,使用以下 3 个替换函数之一。
'first0<-' <- function(x, value){
x[1] <- value
x
}

first0(a) <- 5
a
# returns [1] 5 2 3.

第一个效果很好……但是当我更改定义中的参数名称时,
'first1<-' <- function(somex, somevalue){
somex[1] <- somevalue
somex
}

first1(a) <- 9
# Error in `first1<-`(`*tmp*`, value = 9) : unused argument (value = 9)
a
# returns [1] 5 2 3

它无法工作,但以下代码没问题:
a <- 'first1<-'(a, 9)
a
# returns [1] 9 2 3

如果其他一些名称与 x 相似,它们也可以很好地工作。和 value , 它似乎:
'first2<-' <- function(x11, value11){
x11[1] <- value11
x11
}

first2(a) <- 33
a
# returns [1] 33 2 3

这对我来说没有意义。变量的名称真的重要还是我犯了一些错误?

最佳答案

这里有两件事正在发生。首先,替换函数的唯一真正规则是新值将作为名为 value 的参数传递。它将是最后一个参数。这就是为什么当您指定签名时 function(somex, somevalue) ,您会收到错误 unused argument (value = 9)并且任务不起作用。

其次,事情与签名function(x11, value11)一起工作感谢 R 中参数名称的部分匹配。考虑这个例子

f<-function(a, value1234=5) {
print(value1234)
}
f(value=5)
# [1] 5

请注意 5被退回。此行为在 argument matching 下定义在语言定义中。

查看正在发生的事情的另一种方法是打印实际被调用的调用签名。
'first0<-' <- function(x, value){
print(sys.call())
x[1] <- value
x
}
a <- c(1,2,3)
first0(a) <- 5
# `first0<-`(`*tmp*`, value = 5)

所以第一个参数实际上是作为未命名的位置参数传递的,新值作为命名参数传递 value= .这是唯一重要的参数名称。

关于r - 关于 R,在定义替换函数时,参数是否必须命名为/类似 "x"和 "value"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25611386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com