我正在開發我的第一個包,它針對的是剛接觸R的用戶,所以我正在儘量減少使用該包所需的R技能的數量。因此我想要一個函數來改變我的包內其他函數的默認值。但是我收到以下錯誤:「無法將綁定添加到鎖定的環境」,這意味着該軟件包的環境被鎖定,我不允許更改其功能的默認值。更改某個鎖定包內某個函數的默認值
這裏是拋出一個類似的錯誤示例:
library(ggplot2)
assign(formals(geom_point)$position, "somethingelse", pos="package:ggplot2")
當我嘗試assignInNamespace我得到: 錯誤bindingIsLocked(X,NS):沒有了 「身份」
assignInNamespace(formals(geom_point)$position,"somethingelse", pos = "package:ggplot2")
結合
這是我希望實現的一個例子。
default <- function(x=c("A", "B", "C")){
x
}
default()
change.default <- function(x){
formals(default)$x <<- x # Notice the global assign
}
change.default(1:3)
default()
我知道這遠離推薦的方法,但我願意偷工減料以提高包裝的學習曲線。有沒有辦法做到這一點?
此問題已被標記爲Setting Function Defaults R on a Project Specific Basis的副本。這是一個不同的情況,因爲這個問題涉及如何讓用戶在交互式會話中更改函數的默認值 - 而不是如何實際執行。舊的問題不能用options()函數解決,因此這是一個不同的問題。
我沒有時間寫完整的答案,但看看[Defaults包](http://cran.r-project.org/web/packages/Defaults/index.html)。 – 2013-03-17 14:00:13
默認值包已從CRAN中刪除。 – russellpierce 2016-02-02 19:41:55