作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我替换了一个包的函数,例如 knitr:::sub_ext
.
(注意:我对它是内部函数的地方特别感兴趣,即只能由 :::
访问,而不是 ::
,但相同的答案可能适用于两者)。
library(knitr)
my.sub_ext <- function (x, ext) {
return("I'm in your package stealing your functions D:")
}
# replace knitr:::sub_ext with my.sub_ext
knitr <- asNamespace('knitr')
unlockBinding('sub_ext', knitr)
assign('sub_ext', my.sub_ext, knitr)
lockBinding('sub_ext', knitr)
knitr:::sub_ext
在我做完这件事之后?最好不重新加载包?
sub_ext
功能......):
original.sub_ext <- knitr:::sub_ext
new.sub_ext <- function (x, ext) {
# some extra code that does something first, e.g.
x <- do.something.with(x)
# now call the original knitr:::sub_ext
original.sub_ext(x, ext)
}
# now set knitr:::sub_ext to new.sub_ext like before.
original.sub_ext
其实是以前的
new.sub_ext
与真实的
knitr:::sub_ext
相反,所以我得到无限递归。
sub_ext
是一个内部函数(我不会直接调用它,但是像
knit
这样的 knitr 函数都在内部调用它),我不能希望修改所有调用
sub_ext
的函数调用
new.sub_ext
手动,因此是替换包命名空间中定义的方法。
最佳答案
当您这样做时assign('sub_ext', my.sub_ext, knitr)
,您将不可撤销地覆盖以前与 sub_ext
关联的值值为 my.sub_ext
.但是,如果您首先存储原始值,完成后重置它并不难:
library(knitr)
knitr <- asNamespace("knitr")
## Store the original value of sub_ext
.sub_ext <- get("sub_ext", envir = knitr)
## Overwrite it with your own function
my.sub_ext <- function (x, ext) "I'm in your package stealing your functions D:"
assignInNamespace('sub_ext', my.sub_ext, knitr)
knitr:::sub_ext("eg.csv", "pdf")
# [1] "I'm in your package stealing your functions D:"
## Reset when you're done
assignInNamespace('sub_ext', .sub_ext, knitr)
knitr:::sub_ext("eg.csv", "pdf")
# [1] "eg.pdf"
trace()
添加该代码。 .有什么好处
trace()
也就是说,当你完成后,你可以使用
untrace()
将函数的主体恢复为其原始形式:
trace(what = "mean.default",
tracer = quote({
a <- 1
b <- 2
x <- x*(a+b)
}),
at = 1)
mean(1:2)
# Tracing mean.default(1:2) step 1
# [1] 4.5
untrace("mean.default")
# Untracing function "mean.default" in package "base"
mean(1:2)
# [1] 1.5
trace()
的
where
参数,将共享待跟踪函数命名空间的其他(导出)函数的名称传递给它。因此,要跟踪
中未导出的函数针织 的命名空间,你可以设置
where=knit
关于即使过度分配,也可以检索原始版本的包功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16473795/
我正在开发适用于 Wordpress 的 PSD,并面临着根据颜色过度对齐背景图像或相反的问题。 在桌面上一切都很好,但在移动设备上背景图像变小了(我使用了 background-size: 100%
在标准 Modelica 流体流量源中,通常指定流量或压力。例如,以下边界设置(P 表示压力边界,F 表示流量边界)通常会围绕管道组件: P - 管道 - P F - 管道 - P 但是,有时在同一侧
我正处于设计基于 Azure 的应用程序的早期阶段。考虑到我可能预期的需求的变化性,Azure 吸引我的地方之一是它的可扩展性。因此,我试图保持事物松散耦合,以便我可以在需要时添加实例。 我看到的关于
我与 Xcode 4 dot notation code sense problem 正好相反!点符号的代码完成不仅显示属性,还显示我的方法(在每个完成的左侧标记 P 或 M 分别指示它是属性还是方法
我是一名优秀的程序员,十分优秀!