覆盖命名空间中导入的函数

2024-01-24

As the termplotR 中的函数包含一些奇怪的代码,这些代码给我带来了烦人的错误,我想在我自己的测试代码中覆盖它,直到找到更永久的解决方案。问题是更改的函数没有被加载mgcv包裹。这mgcv包从其命名空间中的 stats 包加载 termplot,使用importFrom()在命名空间文件中。

如何说服 mgcv 使用更改后的 termplot?我试过 :

unlockBinding("termplot", as.environment("package:stats"))
assign("termplot", my.termplot, as.environment("package:stats"))
lockBinding("termplot", as.environment("package:stats"))

当应用于 lm-objects 时,这有效并且使用更改后的 termplot。但是当使用 mgcv 包制作的 gam-objects 时,这不起作用。如果我可以避免的话,我真的不会从源代码构建统计包......

为了澄清,我也尝试过

assignInNamespace("termplot", my.termplot, ns="stats")
assignInNamespace("termplot", my.termplot, ns="mgcv")

在所有可能的组合中,在附加 mgcv 之前,在附加 mgcv 之后,我没有设法让它工作。


EDIT :

我尝试了此处给出的所有选项(除了重建任一包),但无法使其工作。对我来说最简单的方法是使用包装函数。那个讨论可以找到here https://stat.ethz.ch/pipermail/r-devel/2011-June/061197.html。感谢所有的提示。


一个可重现的例子:

my.termplot <- function (x) print("my new termplot")

  unlockBinding("termplot", as.environment("package:stats"))
  assignInNamespace("termplot", my.termplot, ns="stats", envir=as.environment("package:stats"))
  assign("termplot", my.termplot, as.environment("package:stats"))
  lockBinding("termplot", as.environment("package:stats"))


y <- 1:10
x <- 1:10
xx <- lm(y~x)
termplot(xx)
require(mgcv)
dat <- gamSim(1, n = 400, dist = "normal", scale = 2)
b <- gam(y ~ s(x0) + s(x1) + s(x2) + x3, data = dat)
plot(b,all=TRUE)

plot.gam为非平滑项(本例中为 x3)调用 termplot,但无法找到新的 termplot 函数。


EDIT2:显然,我的例子有效。我现在看到我解决了我自己的问题:在第一个代码中,我没有在 allocateInNamespace 中添加命名空间和包。重要的是要记住在加载其他包之前更改命名空间和包中的函数。感谢@hadley 为我指明了正确的方向,感谢@Marek 测试了代码并报告其工作原理,其余的感谢您努力回答。


我很困惑 - 我不知道如何plot.gam正在定位termplot- 据我所知,它没有使用普通的范围规则。这似乎需要比我目前对命名空间有更深入的了解。

my.termplot <- function (x) print("my new termplot")

# where is it defined?
getAnywhere("termplot")
# in package and in namespace

unlockBinding("termplot", as.environment("package:stats"))
assign("termplot", my.termplot, "package:stats")

unlockBinding("termplot", getNamespace("stats"))
assign("termplot", my.termplot, getNamespace("stats"))

getAnywhere("termplot")[1]
getAnywhere("termplot")[2]
# now changed in both places

y <- 1:10
x <- 1:10 + runif(10)
xx <- lm(y ~ x)
termplot(xx) # works

library("mgcv")
b <- gam(y ~ s(x), data = data.frame(x, y))
plot(b) # still calls the old termplot

# I'm mystified - if try and find termplot as
# seen from the environment of plot.gam, it looks 
# like what we want
get("termplot", environment(plot.gam)) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

覆盖命名空间中导入的函数 的相关文章

  • 关于子组的新列和另一列中的百分比范围

    我有一个如下所示的示例 df df test lt data frame Group Name c Group1 Group2 Group1 Group2 Group2 Group2 Group1 Sub group name c A A
  • 将文件夹中的多个 csv 文件读取到 R 中的单个数据帧中[重复]

    这个问题在这里已经有答案了 我有一个包含 332 个 csv 文件的文件夹 文件名称如下 001 csv 002 csv 003 csv 330 csv 331 csv 332 csv 所有文件都具有相同数量的变量和相同的格式 我需要读取一
  • R中无法连接odbc数据库

    我一直在尝试使用以下命令将我公司的 DMS 连接到 RodbcConnect命令 但收到以下消息 myConn lt odbcConnect NZSQL uid cejacobson pwd password Warning message
  • 使用 2 个向量参数翻转函数

    我想对需要 2 个向量参数的函数应用滚动 这是使用 data table 的示例 不起作用 library data table df lt as data table cbind data frame x 1 100 y 101 200
  • ggsubplot 是否适用于 R 3.2.1+?

    CRAN 提供的 ggsubplot 版本与 R 的最新版本 例如 3 1 1 不兼容 运行 ggsubplot 示例会返回以下错误 Error in layout base data vars drop drop At least one
  • 执行数组内的函数

    是否可以从数组内部执行匿名函数 也在数组内部定义 return execute function logic 或者我应该在外面定义它然后再调用它 从技术上讲 您可以将该函数括在括号中并像这样调用它 return function retur
  • data.table 的包装函数

    我有一个已经使用 data frame 上下文编写的项目 为了缩短计算时间 我尝试利用 data table 的速度 我的方法是构造包装函数 读取帧 将它们转换为表 进行计算 然后转换回帧 这是一个简单的例子 FastAgg lt func
  • 根据 R 中的字符串模式选择行

    假设我有以下数据 df lt data frame name c TO for Turnover for people HC people Hello world beenie man apple pears TO is number c
  • 使用 roxygen2 导入两个同名函数

    我是 CRAN 包的维护者 在加载时收到以下消息 checking whether package qdap can be installed 10s 10s WARNING Found the following significant
  • 如何在R中将英尺转换为厘米?

    我得到了一个高度的字符向量 如下所示 859 5 10 5 8 5 11 6 0 5 10 6 2 5 11 6 2 6 2 5 7 5 9 5 7 6 1 6 0 5 11 6 0 6 5 6 1 6 1 5 10 5 11 5 11 6
  • Shiny:从DT数据表中选定的行获取信息

    我们正在尝试重新创建示例 https demo shinyapps io 029 row selection https demo shinyapps io 029 row selection 使用DT包来渲染数据帧而不是shiny包 DT
  • 按组复制数据框

    我有以下数据框 df structure list Group c 1 1 1 1 2 2 2 2 2 2 3 3 3 index c 1 2 3 4 1 2 3 4 5 6 1 2 3 row names c NA 13L class c
  • Shiny :针对所有错误显示一条消息

    我在 R 的 Shiny 中有一个应用程序 我想处理消息 以便用户看不到发生了什么错误 我知道通过 tags style type text css shiny output error visibility hidden shiny ou
  • 连接树状图和热图

    我有一个heatmap 一组样本的基因表达 set seed 10 mat lt matrix rnorm 24 10 mean 1 sd 2 nrow 24 ncol 10 dimnames list paste g 1 24 sep p
  • C++ 命名空间和模板

    我有一些可以组合在一起的函数 但不属于某些对象 实体 因此不能被视为方法 所以 基本上在这种情况下 我会创建一个新的名称空间并将定义放在header文件中的实现cpp文件 另外 如果需要 我会在其中创建一个匿名名称空间cpp文件并将所有不必
  • ggplot2 + 使用比例 X 的日期结构

    我真的需要帮助 因为我已经迷路了 我正在尝试创建一个折线图 显示几个团队一年来的表现 我将一年分为几个季度 2012 年 1 月 1 日 2012 年 4 月 1 日 2012 年 8 月 1 日 12 1 12 并将 csv 数据帧加载到
  • R中data.frame(列表)的列平均值

    Data https i stack imgur com ZYsmv jpg 请 我需要计算此 data frame 中维吉尼亚币 Sepal Length 列的平均值 Sepal Length Sepal Width Petal Leng
  • 如何在闪亮的observeEvent中监听多个事件表达式

    我想要两个不同的事件触发观察者 有人建议here https stackoverflow com questions 34731975 how to listen for more than one event expression wit
  • ggplot:类似于scale_color_steps()的有序因子的色标

    With scale color steps 我们可以通过设置low和high争论 一个例子 df lt data frame x rnorm 99 y rnorm 99 col rnorm 99 ggplot df aes x y col
  • 从 leafletProxy() 返回渲染的传单地图

    是否可以在渲染后在 Shiny 中检索传单地图 下面是一个代码示例 展示了如何生成地图leaflet 与返回的不同leafletProxy 即使它们在渲染时看起来完全相同 是否有一个功能可能不同于leafletProxy 获取实际的 htm

随机推荐

  • 如何从此字符串中删除转义字符?

    我有一个名为argument我需要发送到一个进程 我的论点已经建立 当我检查立即窗口中的值时 我得到以下结果 argument i M visual studio 2013 cherry Database script sql v varD
  • VS Code 错误:(this.configurationService.getValue(...) || []).filter 不是函数

    我刚刚开始在 VS Code 中收到此错误 它阻止我创建新文件 甚至无法打开文件 VS Code 显示的弹出错误是 this configurationService getValue filter is not a function 这个
  • 为什么不起作用

    我希望在名字和姓氏之间添加空格 但是当我运行代码时它不会增加空间 我也尝试添加选项卡空间 但它渲染不正确 字符集设置为utf 8 如所附的html所示 export class AppComponent implements OnInit
  • 在 PHP 中读取 COM(串行调制解调器)

    在 PHP 中读取 COM 串行调制解调器 我需要一个 COM 接口 Windows COM2 来使用 PHP 进行读取 这个演示正在进行中 读取有问题 有时会运行 也许还有另一种方法 没有dio ni C w32api register
  • htaccess 相同的文件夹和文件名

    如何设置 htaccess 来区分文件和同名文件夹 我的网站下有 index php team php team Justin php team martin php 和一个带有 URL 重写的 htaccess 以制作漂亮的 url 并删
  • 使用mockito或Jmockit模拟私有静态最终字段

    我在用私有静态最终记录器我班上的领域 我想要LOGGER isInfoEnabled 返回方法false 如何使用mockito或jMockit模拟静态最终字段 我的班级是 import org slf4j Logger import or
  • MS SQL Server 中的自定义聚合函数?

    如何在 MS SQL Server 中创建自定义聚合函数 举个例子会有很大帮助 SQL Server 2000 并不正式支持自定义聚合函数 然而 我最近也需要该功能 我发现这篇文章很有启发性 http weblogs sqlteam com
  • Scipy 负距离?什么?

    我有一个输入文件 其中包含小数点后 4 位的浮点数 i e 13359 0 0000 0 0000 0 0001 0 0001 0 0002 0 0003 0 0007 第一个是 id 我的班级使用loadVectorsFromFile方法
  • 隐藏移动设备的滚动条,同时保持滚动能力

    我的问题几乎与此相同 隐藏滚动条 但保持滚动的原生感觉 https stackoverflow com questions 6635513 hide the scrollbar but keep the ability to scroll
  • 错误 1 ​​找不到类型或命名空间名称“控制器”(是否缺少 using 指令或程序集引用?)

    当我尝试在 asp net mvc3 中构建项目时 出现27个错误 说mvc相关的类不存在 下面是一个例子 Error 1 The type or namespace name Controller could not be found a
  • 通过虚拟线程中的调用在主线程中执行Python函数

    我有一个 Python 脚本 用于处理来自 NET Remoting 的异步回调 这些回调在虚拟 工作 线程中执行 从我的回调处理程序内部 我需要调用我在脚本中定义的函数 但我需要该函数在主线程中执行 主线程是向服务器发送命令的远程客户端
  • 使用Java创建视频播放器

    我需要为我的项目使用 Java 创建一个视频播放器 我已经在网上查过很多例子了 其中一些运行 但不显示任何屏幕 我只能听到视频的声音 请帮我解决这个问题 我正在使用下面的导入 import javax media 编辑 下面是我使用的代码
  • 背景图像 url() 在实时服务器上有效,但当我在浏览器中打开 index.html 时却不起作用?

    由于其他属性适用 因此正确选择了该元素 没有控制台错误 我努力了 img 英雄 jpg 当我点击 VS Code 中的链接时有效 img 英雄 jpg 当我点击时起作用 英雄 jpg 当我点击时工作 img 英雄 jpg 不起作用 完整路径
  • 将动态 Web 项目导入 Eclipse

    我一直在 Eclipse 中开发一个动态 Web 项目 我最近重新安装了我的操作系统 并且使用了干净的 Eclipse 我可以导入我的网络项目 但是当我尝试吃午饭 在服务器上运行 时 我总是收到此消息 The selection canno
  • 倾斜的div边框透明度

    所以 我知道如何使用 after 和边框为现代布局制作倾斜的 div 但是 我想知道您是否可以使用它通过透明度裁剪掉 div 的一部分 例如 假设我有一排带有背景图像的卡片 我想要在这些卡片上产生倾斜效果 但是 这里的倾斜只是页面 不是卡片
  • /rest-auth/password/reset/ 处的 NoReverseMatch

    我有一个带有角度前端的 Django 应用程序 当我尝试从前端发送密码重置请求时 出现以下错误 使用参数 和关键字反转 password reset confirm 参数 u uidb64 MTE u token u 3z4 eadc7ab
  • HTTP 网站上出现“阻止加载混合活动内容”

    Problem 我正在开发一个使用 HTTP 协议提供服务的网站 在开发中 我使用 Webpack 及其 webpack dev server 它在本地提供页面服务http localhost 9090 我很惊讶地在 Firefox 58
  • 如何创建唯一 ID,例如 YouTube?

    我一直想知道他们是如何以及为什么这样做 一个例子 http youtube com watch v DnAMjq0haic http youtube com watch v DnAMjq0haic 这些 ID 是如何生成的 并且不会重复 这
  • ASP.NET Identity 出现“创建模型时无法使用上下文”异常

    为什么当我们调用 AccountApiController Register 方法时会发生这种情况 什么试图使用上下文 什么试图创建上下文 我们如何避免这种情况 我们如何调试这个 Message 发生错误 ExceptionMessage
  • 覆盖命名空间中导入的函数

    As the termplotR 中的函数包含一些奇怪的代码 这些代码给我带来了烦人的错误 我想在我自己的测试代码中覆盖它 直到找到更永久的解决方案 问题是更改的函数没有被加载mgcv包裹 这mgcv包从其命名空间中的 stats 包加载