如何为R中的函数赋值

时间:2015-04-06 17:11:37

标签: r

在R语言中,有一些函数,如名称和dimnames,您可以为它们赋值:

x <- list('foo'=2, boo=3)
names(x) # This returns ("foo", "boo") vector
names(x) <- c("moo", "doo") # Changes existing item names to ("moo", "doo")

我的问题是如何创建这样的功能,显然它们可以作为集合并同时获取功能。

1 个答案:

答案 0 :(得分:5)

您遇到了一种特殊的功能。来自language definition (section 3.1.3 Function calls)

  

特殊类型的函数调用可以出现在左侧   

中的赋值运算符      

class(x) <- "foo"

     

这个结构真正做的是用原始对象和右侧调用函数class<-。   此函数执行对象的修改并返回   结果然后存储回原始变量。 (至少   从概念上讲,这就是发生的事情。做了一些额外的努力   避免不必要的数据重复。)

这些功能是.Primitive功能。他们调用内部C代码。通常它们是通用函数,这意味着您可以为它们定义方法。

@alexis_laz演示了如何在his comment中创建这样的函数:

second <- function(x) x[2]
"second<-" <- function(x, value) { x[2] <- value; x }
xx <- 1:3
second(xx)
#[1] 2
second(xx) <- 4
xx
#[1] 1 4 3