我尝试通过首先定义一个函数来修改和重新定义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)
答案 0 :(得分:5)
谢谢Josh - 就我而言,我现在通过
开始工作了modifline='if ((profparam$mzcorrf!=1)&length(unique(rawdata$mz - trunc(rawdata$mz)))!=1) {rawdata$mz=rawdata$mz*profparam$mzcorrf} else if (profparam$mzcorrf!=1) {print("Exact masses were already rounded to nominal masses");profparam$mzcorrf=1}'
insertatline=6
trace(xcmsRaw, tracer=modifline,at=c(insertatline))
我找到了使用
插入修改过的代码的正确行as.list(body(xcmsRaw))
要抑制跟踪I的输出,则定义第二个函数
xcmsRaw2=function(...) {sink("NUL");obj=xcmsRaw(...);sink();return(obj) }
可以被调用,但不提供任何不必要的跟踪输出。
通过assignInNamespace()也可以很好地使它工作,因为这将允许更广泛的编辑/重新定义以及函数参数的更改(这将是重新定义函数的常见原因,即,采取一些额外的论点)......