我需要这样的功能:使用属性()内部函数
note<-function(object,text=""){attributes(object)[4]<-text}
如:note(xxx,"yyyy")
中,我尝试设置的值"yyyy"
xxx
对象的第四个属性(在全局ENV)。实际上,函数(如预期的)不起作用,因为它修改了函数env中的值。
有什么建议吗?
我需要这样的功能:使用属性()内部函数
note<-function(object,text=""){attributes(object)[4]<-text}
如:note(xxx,"yyyy")
中,我尝试设置的值"yyyy"
xxx
对象的第四个属性(在全局ENV)。实际上,函数(如预期的)不起作用,因为它修改了函数env中的值。
有什么建议吗?
你可以把函数返回的对象本身,因此它可以被重新分配:
note <- function(object, text = "") {
attributes(object)[4] <- text
return(object)
}
xxx <- note(xxx, "yyyy")
这种方式是没有用的,因为我应该手动重新分配,但是谢谢 – user1453488
在R中,函数不希望修改它们的参数,所以是的,最好是手动重新分配。 –
如果您搜索“通过价值”与“通过参考”进行搜索,则可以找到更多信息。因为R使用“按价值传递”,我建议的是更容易和推荐的方式。然而,使用“通过参考”虽然困难,但并不是不可能的。这可能有所帮助:http://stackoverflow.com/questions/2603184/r-pass-by-reference – flodel
这里的解决方案(发现尝试flodel建议):
note<-function(object,text=""){
object2<-object
attributes(object2)[4]<-text
assign(deparse(substitute(object)),object2,envir=.GlobalEnv)
}
感谢所有
我不会称之为“该”解决方案。由于危险(例如,搜索“为什么使用全局变量不好”),因此功能与变量之外的变量进行交互是非常令人不满的。再次,最佳实践建议该函数返回一个修改后的对象,以便重新分配它。 – flodel
您是否尝试过<< << - 而不是'<-'? – seancarmody