什么是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任何值设置为大于65Inf (无限))。

当你调用这个函数的时候,魔法确实正在完成

 cutoff(x) <- 65 

因为R是parsing,并拉出各个位,使上面显示的真正的电话。

更一般地说,我们有

 FUN(obj) <- value 

Rfind函数"FUN<-"()并通过将objvalue传入"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正在寻找的环境不是secondsecond<- 。 所以让我们做同样的事情,但是使用这样一个函数标识符:

 > `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它 。