什么是R中的replace函数?
我search了一个参考来学习R中的replace函数,但是我还没有find。 我试图理解R中replace函数的概念。我有下面的代码,但我不明白它:
"cutoff<-" <- function(x, value){ x[x > value] <- Inf x }
然后我们打电话切断:
cutoff(x) <- 65
任何人都可以解释R中的replace函数吗?
你打电话时
cutoff(x) <- 65
你实际上是在打电话
x <- "cutoff<-"(x = x, value = 65)
该函数的名称必须被引用,因为它是一个语法上有效但非标准的名称,parsing器会将<-
作为操作符解释为不作为函数名称的一部分(如果没有引用的话)。
"cutoff<-"()
就像任何其他函数一样(虽然有一个奇怪的名字)。 它根据value
对input参数进行更改(在这种情况下,它将x
任何值设置为大于65
以Inf
(无限))。
当你调用这个函数的时候,魔法确实正在完成
cutoff(x) <- 65
因为R是parsing,并拉出各个位,使上面显示的真正的电话。
更一般地说,我们有
FUN(obj) <- value
Rfind函数"FUN<-"()
并通过将obj
和value
传入"FUN<-"()
设置调用,并将"FUN<-"()
的结果分配回obj
,要求:
obj <- "FUN<-"(obj, value)
这个信息有用的参考是R语言定义第3.4.4节:子集分配 ; 讨论有些偏斜,但似乎是最正式的参考(在R常见问题解答(R和S-PLUS之间的区别)中提到了replace函数,在R语言参考(各种技术问题)中提到了replace函数)但在官方文件中我还没有find任何进一步的讨论)。
加文对replace函数的解释提供了极好的讨论。 我想提供一个参考,因为您还要求: R语言定义第3.4.4节:子集分配 。
请记住,在R中所有的操作都是一个函数调用(因此也是赋值操作),所有存在的东西都是一个对象。 replace函数的作用就好像他们修改了他们的参数,比如in
colnames(d) <- c("Input", "Output")
它们在名称的末尾有标识符<-
并返回参数对象(非原语replace函数)或相同对象(原语replace函数)的修改副本,
在R提示符下,以下将不起作用:
> `second` <- function(x, value) { + x[2] <- value + x + } > x <- 1:10 > x [1] 1 2 3 4 5 6 7 8 9 10 > second(x) <- 9 Error in second(x) <- 9: couldn't find function "second<-"
正如你所看到的,R正在寻找的环境不是second
但second<-
。 所以让我们做同样的事情,但是使用这样一个函数标识符:
> `second<-` <- function(x, value) { + x[2] <- value + x + }
现在,向量的第二个位置的赋值工作:
> second(x) <- 9 > x [1] 1 9 3 4 5 6 7 8 9 10
我还写了一个简单的脚本来列出R基础包中的所有replace函数,在这里find它 。