我正在Rstudio中开发一个包,并试图将对象保存为包的内部,这样用户就看不到它了。我在Rstudio中创建了一个名为"testpackage“的默认包项目,然后执行:
library(devtools)
test.hidden.object <- 1:5
use_data(test.hidden.object,internal = T,overwrite = T)
然后我构建包,将其保存到我的库中。然后重启Rstudio,并执行:
library(testpackage)
test.hidden.object
打印输出:1 1 2 3 4 5
环境为空,正在执行:
ls()
打印"character(0)“
据我所知,如果用户知道对象的名称,就不可能对用户隐藏包中的对象,而我不想这样做。但让我担心的是,自动补全功能能够找到这些对象。
在Rstudio和R控制台中,如果我加载包,然后输入"test.hid“,然后按TAB键,我可以看到对象"test.hidden.object”作为一个选项。自动完成应该能够显示内部对象吗?我构建的包是不是不正确?
为了解决这个问题,到目前为止,我已经更新了R、Rstudio、devtools,并且我自己手动创建了sysdata.rda文件,而不是使用"use_data",但每次我都可以使用autocomplete查看内部对象。
发布于 2017-08-06 03:48:11
我想你的描述是错的。RStudio和其他R前端中的自动完成功能将只显示在当前上下文中可见的符号。您的用户无法使用未导出的符号,因此自动完成功能不会显示它们。
在您自己的包中编辑文件时,您可能会看到隐藏的符号,因为您的包代码可以看到隐藏的符号。但是你的用户不会。
编辑后添加:我只是更仔细地遵循了您的说明,并设法复制了您看到的内容。问题是,默认情况下,名称空间文件将所有内容声明为公共,而不考虑internal
的设置。这看起来像是devtools
的误解或错误。若要解决此问题,请手动编辑名称空间文件,以确保仅导出公共元件。
第二次编辑:devtools::use_data
的文档已经在Github上更新。他们现在说:“如果为TRUE
,则将所有对象存储在单个R/sysdata.rda
文件中。此文件中的对象遵循通常的导出规则。请注意,这意味着如果您使用的是导出除以.
开头的对象之外的所有对象的通用exportPattern()
规则,则将导出这些对象。”
https://stackoverflow.com/questions/45516088
复制相似问题