首页 > 解决方案 > 在自定义 R 函数名称中包含“<-”赋值运算符有什么影响?

问题描述

下面我定义了一个包含<-在其名称中的 R 函数。我意识到,没有理解,这个函数使用<-.

虽然 R 说 object myfunis not found while is a function ,myfun<-但我无法理解我如何仍然能够将myx. myfun这样做,我实际上是在调用该myfun<-函数吗?来自 stackoverflow 专家的任何见解和指导将不胜感激!

'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")

标签: rvariable-assignmentoperator-keyword

解决方案


正如@akrun 所说, amyfun和 amyfun<-将是两个不同的函数,第一个用于访问符号表中的值,另一个用于为符号分配值。查看“函数调用”部分中的“R 语言定义”,我们看到:

一种特殊类型的函数调用可以出现在赋值运算符的左侧,如

       class(x) <- "foo"

这个构造真正做的是class<-用原始对象和右手边调用函数。此函数执行对象的修改并返回结果,然后将其存储回原始变量。

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

'myfun<-' <- function (x,value)   paste0(value, " says hello")
myy <- "my_y"
myfun(myx) <- myy
#Error in myfun(myx) <- myy : object 'myx' not found

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

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

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


推荐阅读