【问题标题】:using attributes() inside function在函数内部使用 attributes()
【发布时间】:2012-08-28 03:43:23
【问题描述】:

我需要这样的函数:

note<-function(object,text=""){attributes(object)[4]<-text}  

例如:note(xxx,"yyyy")

我尝试将"yyyy" 对象的第四个属性设置为值"yyyy"(在全局环境中)。实际上,该函数(如预期的那样)不起作用,因为它修改了
函数环境。
有什么建议吗?

【问题讨论】:

  • 你试过&lt;&lt;-而不是&lt;-吗?

标签: r function attributes scope attr


【解决方案1】:

你可以让函数返回对象本身,所以它可以被重新赋值:

note <- function(object, text = "") {
    attributes(object)[4] <- text
    return(object)
}

xxx <- note(xxx, "yyyy")

【讨论】:

  • 这种方式没用,因为我应该手动重新分配,不过谢谢
  • 在 R 中,函数不需要修改它们的参数,所以是的,最好手动重新分配。
  • 如果您搜索“按值传递”与“按引用传递”,您会发现更多信息。因为 R 使用“按值传递”,所以我建议的是更简单和推荐的方式。然而,使用“通过引用传递”并非不可能,尽管很困难。这可能会有所帮助:stackoverflow.com/questions/2603184/r-pass-by-reference
【解决方案2】:

这里的解决方案(发现尝试 flodel 建议):

note<-function(object,text=""){
 object2<-object
 attributes(object2)[4]<-text
 assign(deparse(substitute(object)),object2,envir=.GlobalEnv)
}

谢谢大家

【讨论】:

  • 我不会称其为“解决方案”。让函数与环境之外的变量交互是非常不受欢迎的,因为它很危险(例如,搜索“为什么使用全局变量不好”)。同样,最佳实践建议该函数返回一个修改后的对象,以便可以重新分配它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 2011-03-08
  • 1970-01-01
相关资源
最近更新 更多