我可以加载RData文件而绕过加载名称空间吗?

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

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

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


真正的@baptiste应该在他的评论中得到一些通用解决方案的链接,特别是R CMD INSTALL --fake窍门,如果他把它作为答案R CMD INSTALL --fake ,我会接受。 这就是为什么我不接受我自己的以下答案,以引起我的情况的具体问题,但我张贴我的答案,以防其他人帮助。

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

我想我也可以编写一个函数来遍历拟合模型中的对象及其属性,并删除环境,但这听起来很丑陋和危险。 也许有办法迫使公式和拟合模型不要保留环境,那会更好。 目前,除了保存拟合模型之外,我还会在清理我可能在其中找到的任何环境属性后保存它们的呼叫属性。 如果这不起作用,我会把它们分解成字符串。

PS:我使用了RDS格式,并且尚未使用RData对其进行测试,但我怀疑问题在于某些属性中保存了评估环境,并且与对象保存的格式无关。 如果事实证明这不适用于RData,我会发布更新。

PPS:我怀疑我不是唯一一个听说R CMD INSTALL --fake的人 - 第一次使用欺骗手段,也许这个词应该传播到这里......因为在其他R用户的范围内了解它,这仍然是针对R拒绝服务攻击的明显向量!


我会接受我自己的答案来摆脱SO自动唠叨,但是会拒绝接受并接受@baptiste,如果他们通过发布它作为答案使我可以这样做。 谢谢。

链接地址: http://www.djcxy.com/p/6531.html

上一篇: Can I load an RData file while bypassing loading the namespaces?

下一篇: Cleaning mixed decimal separators after Excel import (gsub maybe?)