我正在为AT/Bluesky做一个R package,我正在尝试一种非传统的结构。由于Bluesky方法通过JSON lexicon defined here以非常精确的细节进行了记录,因此我将这些文件复制到/inst目录中,因此我的包结构如下所示:
├── DESCRIPTION
├── LICENSE
├── LICENSE.md
├── NAMESPACE
├── R
│ ├── bluesky.R
│ ├── helpers.R
│ ├── lexicon.R
│ └── types.R
├── README.Rmd
├── README.md
├── blueRsky.Rproj
├── inst
│ └── lexicons
│ ├── app
│ │ └── bsky
│ │ ├── actor
│ │ │ ├── defs.json
│ │ │ ├── getProfile.json
│ │ │ ├── getProfiles.json
│ │ │ ├── getSuggestions.json
│ │ │ ├── profile.json
│ │ │ ├── searchActors.json
│ │ │ └── searchActorsTypeahead.json
│ │ ├── embed
│ │ │ ├── external.json
│ │ │ ├── images.json
│ │ │ ├── record.json
│ │ │ └── recordWithMedia.json
│ │ ├── feed
│ │ │ ├── defs.json
│ │ │ ├── getAuthorFeed.json
│ │ │ ├── getLikes.json
│ │ │ ├── getPostThread.json
│ │ │ ├── getPosts.json
│ │ │ ├── getRepostedBy.json
│ │ │ ├── getTimeline.json
│ │ │ ├── like.json
│ │ │ ├── post.json
│ │ │ └── repost.json
│ │ ├── graph
│ │ │ ├── follow.json
│ │ │ ├── getFollowers.json
│ │ │ ├── getFollows.json
│ │ │ ├── getMutes.json
│ │ │ ├── muteActor.json
│ │ │ └── unmuteActor.json
│ │ ├── notification
│ │ │ ├── getUnreadCount.json
│ │ │ ├── listNotifications.json
│ │ │ └── updateSeen.json
│ │ ├── richtext
│ │ │ └── facet.json
│ │ └── unspecced
│ │ └── getPopular.json
│ └── com
├── man
│ ├── bsky_get_profile.Rd
│ ├── bsky_get_session.Rd
│ ├── bsky_get_timeline.Rd
│ └── bsky_search_actors.Rd
└── tests
├── testthat
│ └── test-lexicon.R
└── testthat.R
我有一些函数可以查找Lexicon模式,例如
load_schema <- function(id) {
loc <- c("lexicons", strsplit(id, "\\.")[[1]]) |>
paste0(collapse = "/") |>
paste0(".json")
file_path <- system.file(loc, package = "blueRsky", mustWork = FALSE)
cat("file_path:", file_path, "\n")
if (!file.exists(file_path)) {
stop(paste("Schema", id, "not found"))
}
jsonlite::read_json(system.file(loc, package = "blueRsky", mustWork = TRUE))
}
这非常好,因为它允许我抽象出许多用于构造请求的样板文件。
这在本地工作得很好,我可以安装这个包,我所有的测试都通过了,但是它没有通过R CMD CHECK。我相信原因是R CMD CHECK正在从词典目录中删除一些文件。输出显示:
── R CMD build ──────────────────────────────────────────────────────────────────
✔ checking for file ‘/Users/colinfraser/projects/blueRsky/DESCRIPTION’ ...
─ preparing ‘blueRsky’: (1.1s)
✔ checking DESCRIPTION meta-information ...
─ checking for LF line-endings in source and make files and shell scripts (346ms)
─ checking for empty or unneeded directories
Removed empty directory ‘blueRsky/inst/lexicons/com’
─ building ‘blueRsky_0.0.0.9000.tar.gz’
删除空目录'blueRsky/inst/lexicons/com'。
这并不好,因为实际上该目录不是空的,它只是有嵌套的文件夹。然后它失败了,因为它无法加载包代码。
我可以做些什么来阻止R CMD CHECK删除此文件?还是有什么别的问题我知道这是一个有点不寻常的包结构,但它似乎会工作得很好,如果我能让它工作。
2条答案
按热度按时间2w3kk1z51#
R删除了目录
inst/com/
,因为 * 在构建包时 * 它被认为是空的。R无法知道您计划稍后将文件存储在那里;它只是看到一个空目录,并旨在清理东西,使一个整洁的包没有任何绒毛。解决这个问题的办法是:将一个文件放入目录中,可能是
inst/com/README.md
,或者,最低限度是一个零字节占位符假设你的操作系统有
touch
二进制文件。7rfyedvj2#
虽然Dirk E.在评论中提供了一个合适的答案,但我建议您 * 不要 * 将所有数据都包含在您的包中。相反,您可以将数据上传到GitHub存储库,并在稍后阶段提供下载此数据的功能。
如果这些数据对于您的软件包的运行是必需的,请考虑在您的
zzz.R
中或在加载软件包时检查这些数据,并向用户提供下载数据的说明。