首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R对自动完成隐藏包中的内部对象

R对自动完成隐藏包中的内部对象
EN

Stack Overflow用户
提问于 2017-08-05 06:03:12
回答 1查看 252关注 0票数 1

我正在Rstudio中开发一个包,并试图将对象保存为包的内部,这样用户就看不到它了。我在Rstudio中创建了一个名为"testpackage“的默认包项目,然后执行:

代码语言:javascript
运行
复制
library(devtools)
test.hidden.object <- 1:5
use_data(test.hidden.object,internal = T,overwrite = T)

然后我构建包,将其保存到我的库中。然后重启Rstudio,并执行:

代码语言:javascript
运行
复制
library(testpackage)
test.hidden.object

打印输出:1 1 2 3 4 5

环境为空,正在执行:

代码语言:javascript
运行
复制
ls()

打印"character(0)“

据我所知,如果用户知道对象的名称,就不可能对用户隐藏包中的对象,而我不想这样做。但让我担心的是,自动补全功能能够找到这些对象。

在Rstudio和R控制台中,如果我加载包,然后输入"test.hid“,然后按TAB键,我可以看到对象"test.hidden.object”作为一个选项。自动完成应该能够显示内部对象吗?我构建的包是不是不正确?

为了解决这个问题,到目前为止,我已经更新了R、Rstudio、devtools,并且我自己手动创建了sysdata.rda文件,而不是使用"use_data",但每次我都可以使用autocomplete查看内部对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-06 03:48:11

我想你的描述是错的。RStudio和其他R前端中的自动完成功能将只显示在当前上下文中可见的符号。您的用户无法使用未导出的符号,因此自动完成功能不会显示它们。

在您自己的包中编辑文件时,您可能会看到隐藏的符号,因为您的包代码可以看到隐藏的符号。但是你的用户不会。

编辑后添加:我只是更仔细地遵循了您的说明,并设法复制了您看到的内容。问题是,默认情况下,名称空间文件将所有内容声明为公共,而不考虑internal的设置。这看起来像是devtools的误解或错误。若要解决此问题,请手动编辑名称空间文件,以确保仅导出公共元件。

第二次编辑:devtools::use_data的文档已经在Github上更新。他们现在说:“如果为TRUE,则将所有对象存储在单个R/sysdata.rda文件中。此文件中的对象遵循通常的导出规则。请注意,这意味着如果您使用的是导出除以.开头的对象之外的所有对象的通用exportPattern()规则,则将导出这些对象。”

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45516088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档