【发布时间】:2018-02-16 10:22:04
【问题描述】:
不确定这是否可行,但值得一问。我需要能够修改加载到全局环境中的函数。例如,假设我有一个类似下面的函数,它返回向量的中位数
myVec<-c(1,2,3,4,5,5,5,6,7,8,9,10)
average<-function(x){
median(x)
}
average(myVec)
现在我想更新函数以返回平均值,但不改变函数的整体结构,所以我想更新 average() 使其变为
average<-function(x){
mean(x)
}
这可能吗?我猜想以某种形式将函数写入临时文件并调用readLines() 和writeLines(),但到目前为止我还没有取得任何成功。
【问题讨论】:
-
如果你想覆盖整个函数体,有
body(average) <- quote(mean(x))。我猜,在更精细的层面重写现有函数可能会变得很混乱。 -
如果你定义一个函数两次,较新的函数会覆盖较旧的函数,因此将使用较新的函数。
-
自修改代码往往很难调试。通常,人们会定义原始函数以将可替换功能作为参数传递。该参数本身可能是一个函数。
-
也许你可以举一个“结构”很重要的例子。它可能像
average = function(x){1+1; median(x)}一样简单/愚蠢如果您的功能足够简单,也许这会有所帮助:stackoverflow.com/q/2458013 -
如果函数不仅仅是对
median的调用,请确保只替换单个函数调用而不是整个函数调用。在这种情况下,body(average)[[2]][[1]] <- quote(mean)就是您想要做的所有事情。
标签: r function environment