将“<-”赋值运算符作为自定义 R 函数名称的一部分包含在内会产生什么影响?

What is the effect of including "<-" assignment operator as part of a custom R function name?

下面我定义了一个 R 函数,其中包含 <- 作为其名称的一部分。我意识到,在不理解的情况下,这个函数使用了 <-.

右侧的值

虽然 R 说找不到对象 myfunmyfun<- 是一个函数,但我无法理解我如何仍然能够将 myx 包装在 myfun 中。这样做,我实际上是在调用 myfun<- 函数吗? Whosebug 专家的任何见解和指导将不胜感激!

'myfun<-' <- function (x,value)   x <- paste0(value, " says hello")
myx <- "my_x"
myy <- "my_y"
myfun(myx) <- myy
myx
[1] "my_y says hello"
myfun
Error: object 'myfun' not found
`myfun<-`
function (x,value)   x <- paste0(value, " says hello")

正如@akrun 所说,myfunmyfun<- 将是两个不同的函数,第一个用于从符号 table 访问值,另一个用于分配符号的值。查看 "R Language Definition" in the Function Calls" section 我们看到:

A special type of function calls can appear on the left hand side of the assignment operator as in

       class(x) <- "foo"

What this construction really does is to call the function class<- with the original object and the right hand side. This function performs the modification of the object and returns the result which is then stored back into the original variable.

您对函数的定义还有一个方面暴露了进一步的误解。该函数体内的赋值操作是完全没有必要的。 <- 函数的值实际上是 RHS 的值,因此除非您对 x 进行了 return() 编辑,否则不需要对 x 进行赋值。让我们将赋值放在函数体之外,并尝试在不首先在符号 table 中为 myx:

创建条目的情况下进行赋值
'myfun<-' <- function (x,value)   paste0(value, " says hello")
myy <- "my_y"
myfun(myx) <- myy
#Error in myfun(myx) <- myy : object 'myx' not found

在符号 table 中为项目创建条目的常用方法是使用空 class 构造函数之一:

myx <- character(0)
myfun(myx) <- myy
myx
#[1] "my_y says hello"   # Success

注意函数名中的赋值运算符指示符号myx被用作“目标”,因此它不必是“[=33=”的值]" 或任何类似它的字符值。您本可以使用 numeric(0) 并且您只会在稍后返回阅读您的代码时感到困惑,但解释器只会将目标符号的 class 强制转换为字符。 R 的类型非常弱。