分离并重新附加“tools:rstudio”

2024-06-19

又名玩火...

以下不起作用:

rstd.obj <- as.environment("tools:rstudio")
detach("tools:rstudio")
attach(rstd.obj, name="tools:rstudio")

好吧,它似乎有效,但随后各种奇怪的错误开始出现。问题是非常烦人(尽管我确信有一个很好的理由)attach制作环境的副本并附加它,而不是直接附加环境:

rstd.obj
# <environment: 0x000000000930edd0>
# attr(,"name")
# [1] "tools:rstudio"
as.environment("tools:rstudio")
# <environment: 0x000000000a21b4c8>
# attr(,"name")
# [1] "tools:rstudio"

请注意环境实际上有何不同(如果您查看源代码也可以确认这一点)do_attach in src/main/envir.c@2124(R3.0.2)副本的制作地点)。

然而,这完全可以正常工作(重新启动 RStudio 以重置所有内容后):

rstd.obj <- as.environment("tools:rstudio")
rstd.parent <- as.environment("package:stats")  # this was #3 on search path for me
detach("tools:rstudio")

# WARNING: YOU'RE PLAYING WITH FIRE IF YOU RUN THIS, DO
# SO AT YOUR OWN RISK:

parent.env(.GlobalEnv) <- rstd.obj
parent.env(rstd.obj) <- rstd.parent

而不是使用detach/attach, 我们刚刚detach,并使用强行将对象插入回搜索路径parent.env<-。另一方面,我猜这样做可能接近 R Core 在警告时的想法?parent.env:

替换功能parent.env<-极其危险,因为它可用于以违反内部 C 代码所做假设的方式破坏性地改变环境。它可能会在不久的将来被删除。

解决此问题的另一种方法是使用detach/attach,然后循环遍历中的所有函数tools:rstudio搜索路径上的环境并将其环境重置为搜索路径上原始环境的副本(顺便说一句,这就是 Rstudio 开始崩溃的原因:函数环境仍然是从搜索路径中删除的对象,但该环境不在不再是搜索路径,只是它的副本)。但这感觉非常hacky。

另外,如果有人知道有关“内部 C 代码所做的假设”的更多详细信息,我将非常有兴趣听到它们。显然,我们可以在搜索路径中引入循环(不,我不是不小心搞乱了这些例子......),但是还有其他问题吗?

编辑:关于上述内容,来自的超级有用的花絮R-devel http://r.789695.n4.nabble.com/Making-parent-env-lt-an-error-for-package-namespaces-and-package-imports-td4698432.html:

我想提议对 R 语言进行更改,以便调用 包命名空间或包导入上的“parent.env

卢克·蒂尔尼的回答是:

我会调查一下

这似乎证实了人们的担忧是以 R 可能无法跟踪的方式更改调用或搜索路径中的调用堆栈,这与通常的想法相反parent.env<-对于其他环境链来说是危险的(清楚地阅读这里的行间)。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分离并重新附加“tools:rstudio” 的相关文章

  • 为不同部分设置 rmarkdown 选项卡颜色

    我想用 Rmarkdown 创建一个 html html 应包含彩色选项卡 根据来自的答案这个问题 https stackoverflow com questions 55276670 coloring tabs in rmarkdown我
  • [R][传单]:点击超链接

    我想在世界地图上添加标记 当用户单击一个标记时 它会将用户引导到另一个网站 而不是弹出窗口 我是这个库的新手 实际上这是我为了解决这个问题而尝试的第一个库 带有超链接标记的交互式地图 供用户单击并转到另一个网站 所以我能做的就是 map l
  • 如何在Shiny App中点击tabPanel后跳转到另一个网页

    我有以下内容Shiny http shiny rstudio com app library shiny shinyApp ui lt shinyUI navbarPage X men tabPanel icon icon home lib
  • 如何将函数应用于表以将 P 值输出为新行

    我有这个简单的数据框 sum 列表示行的总和 我想使用 prop test 来确定每列的 P 值 并将该数据显示为标记为 p 值的附加行 我可以按以下方式使用 prop test 来确定任何单个列的 p 值 但无法弄清楚如何使用单个函数将其
  • 将列表元素名称作为变量传递给 lapply 中的函数

    我有一个命名的数据列表和一个要应用于数据的自定义函数 Some example data d list lt list a c 1 2 3 b c 4 5 6 c c 7 8 9 A simple function to process s
  • 如何用 df 中的字符替换 NA [重复]

    这个问题在这里已经有答案了 我希望在 df 中将所有 NA 替换为 Not Found 我有这个 df A B 1 NA 2 NA 3 NA 我怎样才能得到那个 A B 1 Not Found 2 Not Found 3 Not Found
  • glm 起始值不被接受日志链接

    我想运行带有日志链接和偏移量的高斯 GLM 出现以下问题 y lt c 1 1 0 0 t lt c 5 3 2 4 没问题 exp coef glm y 1 offset log t family poisson with family
  • 约束优化 R:另一个例子

    我正在尝试在 R 中执行约束优化 我已经查看了这些帖子和其他一些帖子 R 中的约束优化 https stackoverflow com questions 5436630 constrained optimization in r R 中的
  • 使用 R 以双对数刻度(以 10 为底)绘制分布的密度线

    我知道参数log xy 但我不知道你是否可以控制对数刻度的底数 我的猜测是 10 可能是默认值 而且我在下面的具体问题上并不幸运 我怎样才能重现以下情节 从这个来源 http www uvm edu pdodds teaching cour
  • 在 blogdown 中包含图像预览(.Rmd yaml 标头)

    我尝试了几种方法 但到目前为止都没有效果 我想在我的主博客页面上添加用 R markdown Rmd 编写的博客文章的图像预览 其中通常会显示许多帖子和项目 我可以使用以下从 Hugo 获取的代码使其在普通 markdown md 中工作a
  • 您使用 Attach() 或按名称或切片调用变量吗?

    许多介绍 R 的书籍和指南都是从附加一个 R 语言的实践开始的 data frame这样您就可以通过名称调用变量 我一直发现用以下方式调用变量是有利的 符号或方括号切片 2 这样我就可以使用多个data frames 而不混淆它们和 或使用
  • orderBy 随递减排序和递增排序的变化

    是否有一种标准方法可以按几列对 data frame 进行排序 但会发生减少或增加的变化 例如 您可能希望按一个变量 递减 和下一个变量 递增 对 data frame 进行排序 有没有类似的东西 mydf order mydf myvar
  • 在闪亮仪表板中显示/隐藏菜单项

    当进入应用程序时 我需要隐藏一个菜单项 当用户选择某个值时 菜单项必须出现 我努力了shinyjs功能hidden 并且它隐藏了一个 menuItem 但是当使用show or toggle 菜单项不会出现 我发现了Rshinydashbo
  • 在 R 中使用两个 for 循环创建矩阵/数据框

    这是我在 SO 上的第一篇文章 所以请友善 我的问题与这个问题隐约相关 R中的双for循环创建矩阵 https stackoverflow com questions 44376020 double for loop in r creati
  • 如何找到对象的创建位置?

    我目前正在努力改进对其他脚本有不同调用的代码 我想知道在哪里创建对象 对于其中一些人来说 只需使用文本编辑器的搜索选项即可 只要看看是否obj lt or obj 有什么结果 但这不适用于使用assign功能 在加载的脚本中创建的也不是 T
  • lme4:如何指定 2 个与随机截距的相关性,而不添加随机斜率之间的相关性

    重新发布自stats stackexchange com https stats stackexchange com q 195385 33560 我试图在 R 的 lme4 包中指定一个模型 其中随机截距和随机斜率之间有 2 个相关性 但
  • 中断、保存并稍后继续循环的最佳方法

    事情是这样的 我有一个需要几天时间才能运行的循环 我想中断循环 检查进度 然后稍后继续 目前 我正在使用以下内容 for i in 1 100000 Sys sleep i 2 5 print i write csv i i csv 我检查
  • 使用 geom_bar 和 stat="identity" 绘制平均值的 hline

    我有一个条形图 其中确切的条形高度位于数据框中 df lt data frame x LETTERS 1 6 y c 1 6 1 6 1 g rep x c a b each 6 ggplot df aes x x y y fill g g
  • 我想知道像tineye.com这样的反向图像搜索服务是如何工作的......?

    像 TinEye 这样的反向图像搜索引擎如何工作 我的意思是进行图像搜索需要哪些参数 不知道 TinEye 是否使用这个 但是SURF http en wikipedia org wiki SURF是用于此目的的常用算法 在这里您可以看到一
  • 什么是 data.frame 可以做而 data.table 不能做的事情?

    我刚刚开始使用 R 并遇到了 data table 我发现它很棒 一个非常天真的问题 我可以忽略 data frame 来使用 data table 以避免两个包之间的语法混淆吗 来自数据表常见问题解答 http datatable r f

随机推荐