gpt4 book ai didi

r - 我可以在绕过加载 namespace 的同时加载 RData 文件吗?

转载 作者:行者123 更新时间:2023-12-02 04:59:58 26 4
gpt4 key购买 nike

假设我的一些用户无法更改他们的 R 环境,但我需要他们能够打开 RData 文件。这些环境文件需要加载一个包(确切地说是 httpuv)。我们不关心包,我们不需要它的功能,我们只需要获取数据。有没有办法在加载 RData 文件时强制 R 绕过加载命名空间,或者强制它在原始端保存它而没有命名空间依赖性?谢谢。

要重现,请安装 Shiny。从 Shiny applet 中创建一些 R 对象并将其作为 RData 文件保存到服务器的文件系统。将文件复制到没有安装 Shiny 或 httpuv 包的计算机上。尝试加载 RData 文件,即使您保存的实际对象完全是普通的 data.frames,与 Shiny 或 httpuv 无关。

我在 RData 上做了 strings,这该死的东西充满了对 httpuv 的引用。软件正在加载文件,然后在内部 loadFromConn2() 函数中主动决定不继续。因此必须有办法让它停止这样做。

最佳答案

真的,@baptiste 应该因为他评论中指向一些通用解决方案的链接而受到赞扬,尤其是 R CMD INSTALL --fake 技巧,如果他将其重新发布为答案,我会接受。这就是为什么我不接受我自己对导致我的情况的具体问题的以下答案,但我发布我的答案以防它帮助其他人。

我保存的一些对象是 lm 拟合对象。这些包含公式/术语对象(至少每个两个,出于某种原因……可能是因为它们已经通过 stepAIC),而这些公式又各自具有一个环境属性。环境属性是 .GlobalEnv,它可能在某处包含包函数的副本。当我挖掘拟合模型内的对象,然后是这些对象的所有属性内的对象,然后是这些对象的属性内的对象......并将我能找到的每个环境属性设置为 NULL,最终,我能够将该拟合模型保存到一个文件中,该文件可以从不同的 R 安装打开,而不会出现关于无法加载命名空间的错误。

我想我也可以编写一个函数来遍历拟合模型中的对象及其属性,并删除环境,但这听起来很丑陋和危险。也许有一种方法可以强制公式和拟合模型不保留环境,这样会更好。目前,我不会保存拟合模型,而是在清除我可能在那里找到的任何环境属性后保存它们的调用属性。如果这不起作用,我会将它们分解为字符串。

PS:我用的是RDS格式,还没有用RData测试过,不过我怀疑问题出在一些属性的evaluation environment的保存上,和其中的格式无关对象被保存。如果事实证明这也不适用于 RData,我会发布更新。

PPS:我怀疑我不是这里唯一第一次听说 R CMD INSTALL --fake 技巧的人,也许应该传播这个消息......因为在某种程度上其他 R 用户不知道它,这仍然是针对 R 的拒绝服务攻击的明显载体!


我会接受我自己的答案以摆脱 SO 自动唠叨,但如果他们允许我通过将其发布为答案来这样做,我将不接受它并接受@baptiste。谢谢。

关于r - 我可以在绕过加载 namespace 的同时加载 RData 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17374680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com