就R语言也有类似的名称和dimnames一些功能,你可以作为例子给它们赋值:如何赋值函数中的R
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")
我的问题是如何这显然创建这样的功能,它们充当集合并同时获得功能。
就R语言也有类似的名称和dimnames一些功能,你可以作为例子给它们赋值:如何赋值函数中的R
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")
我的问题是如何这显然创建这样的功能,它们充当集合并同时获得功能。
您遇到了一种特殊的功能。从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
谢谢。虽然这不是一个解决方案,但它可能是一个很好的迹象,我应该停止在这个方向上再寻找。 –
@ PollaA.Fattah请参阅编辑。 – Roland
这就是我在寻找如此多的感谢,指出我需要这种功能,并感谢@alexis_laz,他向我展示了如何创建它。 –
也许'setNames(列表( '富'= 2,嘘声= 3),C( 'も', '斗')) ' – akrun
'name'和'names <-'实际上是不同的功能。它们是泛型,所以你可以为它们定义方法。 – Roland
@Roland据我的理解,你的评论中有一个函数'names <-'用于改变names属性。如果您告诉我如何创建任何函数,可以说'func <-',以便我可以更改其他属性,那么我将非常感谢。 –