【发布时间】:2013-04-25 10:11:48
【问题描述】:
我尝试通过首先定义一个函数来修改和重新定义R包xcms中的一个函数(xcmsRaw)
my.xcmsRaw <- function(filename, profstep = 1, profmethod = "bin",
profparam = list(mzcorrf=1), # PATCH - mzcorrf is the m/z correction factor, e.g. 0.99888 for long-chain hydrocarbons
includeMSn = FALSE, mslevel=NULL,
scanrange=NULL) { ... }
然后输入
unlockBinding("xcmsRaw", as.environment("package:xcms"))
assign("xcmsRaw", my.xcmsRaw, as.environment("package:xcms"))
lockBinding("xcmsRaw", as.environment("package:xcms"))
但是,当我运行它时,它给了我错误
Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'profBinM' of mode 'function' was not found
因为没有找到profBinM函数,这是一个定义在xcms包的xcms.c文件中的C代码函数。
对如何解决此问题有任何想法吗? (我在 Windows 7 下工作,使用 R 版本 3.0.0)
【问题讨论】:
-
您是否尝试过
assignInNamespace(),例如this example?在你的情况下,你会使用类似assignInNamespace(x="xcmsRaw", value="my.xcmsRaw", ns=asNamespace("xcms"))。 -
感谢您的建议,刚刚尝试过,但不幸的是它仍然给我同样的错误......
-
有趣。准确地说/清楚,
profBinM()是一个 R 函数包装了一个 C 函数。 -
是的,该函数在文件 xcms.c 中定义(在 Windows 中这当然已经被预编译)为 void ProfBinM(double *xvals, double *yvals, int *numin, int *mindex, int *nummi, double *xstart, double *xend, int *numout, double *out) { ... }
-
您是否尝试过
trace(xcmsRaw, edit=TRUE)并以这种方式进行更改?
标签: r function package redefine