2012-09-03 55 views
3

我需要这样的功能:使用属性()内部函数

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

如:note(xxx,"yyyy")

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

+0

您是否尝试过<< << - 而不是'<-'? – seancarmody

回答

4

你可以把函数返回的对象本身,因此它可以被重新分配:

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

xxx <- note(xxx, "yyyy") 
+0

这种方式是没有用的,因为我应该手动重新分配,但是谢谢 – user1453488

+6

在R中,函数不希望修改它们的参数,所以是的,最好是手动重新分配。 –

+1

如果您搜索“通过价值”与“通过参考”进行搜索,则可以找到更多信息。因为R使用“按价值传递”,我建议的是更容易和推荐的方式。然而,使用“通过参考”虽然困难,但并不是不可能的。这可能有所帮助:http://stackoverflow.com/questions/2603184/r-pass-by-reference – flodel

0

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

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

感谢所有

+0

我不会称之为“该”解决方案。由于危险(例如,搜索“为什么使用全局变量不好”),因此功能与变量之外的变量进行交互是非常令人不满的。再次,最佳实践建议该函数返回一个修改后的对象,以便重新分配它。 – flodel