假设我的一些用户无法更改他们的 R 环境,但我需要他们能够打开 RData 文件。这些环境文件需要加载一个包(确切地说是httpuv)。我们不关心包,我们不需要它的功能,我们只需要获取数据。有没有办法强制 R 在加载 RData 文件时绕过加载命名空间,或者强制它在源端不依赖命名空间的情况下保存文件?谢谢。
要重现,请安装 Shiny。在 Shiny 小程序中创建一些 R 对象并将其作为 RData 文件保存到服务器的文件系统中。将文件复制到未安装 Shiny 或 httpuv 软件包的计算机上。尝试加载 RData 文件,即使您保存的实际对象完全是与 Shiny 或 httpuv 无关的普通 data.frames。
I did strings
在 RData 上,该死的东西充满了对 httpuv 的引用。软件正在加载文件,然后在内部主动决定不再继续loadFromConn2()
功能。因此必须有一种方法让它停止这样做。
确实,@baptiste 应该因其评论中对一些通用解决方案的链接而受到赞扬,尤其是R CMD INSTALL --fake
技巧,如果他将其重新发布为答案,我会接受。这就是为什么我不接受我自己对导致我的情况的具体问题的以下答案,但我发布我的答案以防它对其他人有帮助。
我保存的一些对象是lm
已安装的对象。这些包含公式/术语对象(出于某种原因,每个至少两个......也许是因为它们已经通过stepAIC
),而这些公式又各自具有环境属性。环境属性为.GlobalEnv
它可能确实在某个地方包含包函数的副本。当我挖掘拟合模型内的对象,然后挖掘这些对象的所有属性内的对象,然后挖掘这些对象的属性的属性内的对象时......并将我能找到的每个环境属性设置为 NULL,最终,我能够将该拟合模型保存到一个文件中,该文件可以从不同的 R 安装中打开,而不会收到有关无法加载命名空间的错误。
我想我还可以编写一个函数来迭代拟合模型中的对象及其属性,并删除环境,但这听起来丑陋且危险。也许有一种方法可以强制公式和拟合模型不保留环境,这样会更好。目前,我不会保存拟合模型,而是在清理可能在那里找到的任何环境属性后保存它们的调用属性。如果这不起作用,我会将它们解析为字符串。
PS:我使用的是RDS格式,尚未使用RData进行测试,但我怀疑问题在于某些属性中评估环境的保存,与保存对象的格式无关。如果事实证明这不适用于 RData,我将发布更新。
PPS:我怀疑我不是这里唯一听说这件事的人R CMD INSTALL --fake
这是第一次,也许应该传播这个消息......因为在其他 R 用户不知道的情况下,这仍然是针对 R 的拒绝服务攻击的明显向量!
我会接受我自己的答案以摆脱 SO 自动胡言乱语,但如果他们使我可以通过将其发布为答案来这样做,我将不接受它并接受@baptiste。谢谢。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)