在R包重新定义的函数(Redefining a function in an R package)

2019-09-01 14:41发布

我试图修改和通过首先定义一个函数重新定义中的R包。LCMS一个函数(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功能,这是在包装。LCMS的文件xcms.c定义的C代码功能。

我如何能解决这个问题有什么想法? (我在Windows 7下工作,,使用R版本3.0.0)

Answer 1:

由于约什 - 在我的情况我现在通过工作

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))

为了抑制跟踪的输出我然后限定的第二函数

xcmsRaw2=function(...) {sink("NUL");obj=xcmsRaw(...);sink();return(obj) }

可在被调用,其不提供任何不必要的跟踪输出。

仍然是好的,得到它通过assignInNamespace工作()太虽然,因为这将允许更广泛的编辑/重新定义,并在函数参数的变化(这是一个常见的原因重新定义的功能,也就是采取一些额外的参数)...



文章来源: Redefining a function in an R package