在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")
我的问题是如何创建这样的功能,显然它们可以作为集合并同时获取功能。
答案 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