在R语言中,attributes()是一个函数吗?

3

帮助文件称attributes()为函数。它的语法看起来像一个函数调用。甚至class(attributes)也将其称为函数。

但我发现我可以将某些内容分配给attributes(myobject),这似乎很不寻常。例如,我不能将任何东西分配给log(myobject)

那么像attributes()这样的“函数”的正确名称是什么?还有其他类似的例子吗?如何区分它们与常规函数?(除了尝试supposedfunction(x)<-0之外。)

最后,我猜attributes()的实现覆盖了赋值运算符,以成为分配的目标。我是对的吗?是否有任何可用的指南告诉我们如何做到这一点?

1个回答

4

非常好的观察。这是替换函数的一个例子,如果你仔细观察并在R控制台中键入apropos('attributes'),它将返回:

 "attributes"                        
 "attributes<-"  

除了其他输出之外。

所以,基本上你能在赋值运算符左侧进行赋值的地方,你并没有调用attributes,你实际上是调用了attributes<-,R中有许多类似的函数,例如:names(),colnames(),length()等。在你的示例中,log没有任何替换对应项,因此它不会按照你期望的方式工作。

定义(来自下面给出的《Advanced R》书籍链接):

替换函数的作用就像是它们直接修改它们的参数一样,并具有特殊的名称xxx<-。它们通常有两个参数(x和value),尽管它们可以有更多的参数,并且它们必须返回修改后的对象

如果你想查看这些函数的列表,你可以执行:apropos('<-$'),然后可以检查类似的函数,它们具有类似的属性。

你可以在这里这里阅读相关信息。

我希望这解决了你的问题。


2
简洁明了:attributes(x) <- c(...) 等同于 \attributes<-`(x, c(...))`。 - r2evans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接