2012-09-03 60 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

相關問題