r - 在自定义 R 函数名称中包含“<-”赋值运算符有什么影响?
问题描述
下面我定义了一个包含<-
在其名称中的 R 函数。我意识到,没有理解,这个函数使用<-
.
虽然 R 说 object myfun
is 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")
解决方案
正如@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 是非常弱类型的。
推荐阅读
- python - 将像素/场景坐标(来自 MouseClickEvent)转换为绘图坐标
- python - 如何编写一个包含一个元素的列表作为 CSV 中的一个元素而不是一个列表?
- php - PHP - 从 HERE REST API 获取不记名令牌会引发签名不匹配错误
- scala - 具有泛型的 Scala 存根类
- javascript - jQuery 我想只列出数据库中的位置为 : 2 的用户
- sql - 范围为用户 ID 的自动递增列
- ios - Runner 使用 Flutter 的问题
- android - 收到有关 Android 订阅取消的通知
- c - 下面的求一个数的阶乘的代码在Xcode上进入了一个无限循环。取这个数作为输入后没有显示输出
- spring-boot - 将带有 spring-boot-sleuth 的跟踪信息发送到 Datadog