使用trace在R中编辑函数?

时间:2018-03-29 09:48:12

标签: r function edit trace

我注意到我想要使用的包中的函数存在错误。在github上已经出现了一个问题,但创作者还没有解决这个问题,我需要尽快使用该功能。

因此我想编辑代码。显然,这可以通过编辑源代码,重新打包和安装整个软件包来实现,我可以重写函数并重新分配命名空间,但也可以只使用trace()编辑当前会话中的函数。

我已经发现我能做到:

as.list(body(package:::function_inside_function))

我要编辑的行位于该功能的第二个步骤中。

具体来说,我需要编辑的代码是this line。我必须将ignore.case更改为ignore.case=True。链接死亡的一个例子:

functionx(){if{...} else if(grepl("miRNA", data.type, ignore.case)) {...}}

我还没有找到一个关于如何从这里开始的实际例子,所以任何人都可以向我展示如何做到这一点的例子,或者引导我一个使用跟踪或可能重新分配函数的实际示例命名空间 - 我还没有真正找到一个如何做到这一点的实际例子。

文档中的示例在这个imho上并不是很清楚。

2 个答案:

答案 0 :(得分:2)

我遇到过类似的问题并使用assignInNamespace()解决了问题。我没有安装你的包,所以我不能确定这对你有用,但我认为应该。您将按以下步骤进行操作:

制作所需功能的版本,如编辑:

# I would just copy the function off github and change the offending line
readTranscripttomeProfiling <- function() {"Insert code here"}

# Get the problematic version of the function out of the package namespace
tmpfun <- get("readTranscripttomeProfiling", 
               envir = asNamespace("TCGAbiolinks"))

# Make sure the new function has the environment of the old 
# function (there are possibly easier ways to do this -- I like 
# to get the old function out of the namespace to be sure I can do 
# it and am accessing what I want to access)
environment(readTranscripttomeProfiling) <- environment(tmpfun)
# Replace the old version of the function in the package namespace
# with your new version
assignInNamespace("readTranscripttomeProfiling", 
                   readTranscripttomeProfiling, ns = "TCGAbiolinks")

我在另一个StackOverflow响应中找到了这个解决方案,但目前似乎无法找到原始版本。

答案 1 :(得分:2)

对于您的具体情况,您可能确实可以使用 eventClick: function(event, jsEvent, view) { $('#calendar').fullCalendar( 'rerenderEvents' ); deleteEventFromDB(event._id,event.teacher_name); $('#calendar').fullCalendar('removeEvents',event._id); $('#calendar').fullCalendar( 'rerenderEvents' ); }, 处理它。

从你提供的链接我不知道为什么你在函数中谈到函数,但这应该有效:

trace

请注意,如果要修复的参数# example trace("grepl", tracer = quote(ignore.case <- TRUE)) grepl("hi", "Hi") ## Tracing grepl("hi", "Hi") on entry ## [1] TRUE # your case (I assume) trace("readTranscriptomeProfiling", tracer = quote(ignore.case <- TRUE)) 尚未处于调用中的正确位置,则会更复杂。