可以为不在包中的对象创建Rd帮助文件吗?

Ada*_*amO 14 r roxygen2

我正在使用Rstudio简化Sweave和R的数据分析,我将与其他分析师分享.为了使变量的编码变得清晰,如果需要的话,可以使用帮助文件这样的东西来调用?myData并获取有用的文件.我喜欢Rd降价并认为它实际上具有记录分析数据集的巨大潜力,包括总体摘要,通过变量分解的变量,以及如何运行一些探索性分析的示例.

如果你专门创建一个包,这很容易做到这一点,但我认为它很混乱,因为包最终是一个函数集合,它们不集成Rnw文件.

我可以使用Roxygen2为不属于任何包的数据集创建帮助文件吗?

cha*_*one 8

在我解决这个问题之前,我想重申别人的意见.R的包装系统正是您正在寻找的.许多人成功地使用它来分发数据而没有代码.结合R的数据延迟加载,您可以将大型数据集作为包分发,而不是负担不想加载所有数据的用户.

此外,除非您使用包,否则您将无法利用R的帮助系统.原始问题明确询问使用情况?myData,如果您不使用软件包,您的用户将无法执行此操作.这简直是​​R的基本帮助功能的限制.


现在,回答这个问题.您将需要使用一些非导出的roxygen函数来完成这项工作,但这并不是太麻烦.此外,您需要将您的R文件记录到他们自己的某个文件夹中,并且在该文件夹中,您将需要创建一个名为的空文件夹man.

示例目录结构:

# ./
# ./man/
# ./myData.R
# ./otherData.R
Run Code Online (Sandbox Code Playgroud)

myData.R

#' My dataset
#' 
#' This is data I like.
#' 
#' @name myData
NULL
Run Code Online (Sandbox Code Playgroud)

otherData.R:

#' My other dataset
#' 
#' This is another dataset I like
#' 
#' @name otherData
NULL
Run Code Online (Sandbox Code Playgroud)

现在,代码将它们组合在一起(当然你可以将它包装在一个函数中):

library(roxygen2)
mydir <- "path/to/your/data/directory/"
myfiles <- c("myData.R","otherData.R")

# get parsed source into roxygen-friendly format
env <- new.env(parent = globalenv())
rfiles <- sapply(myfiles, function(f) file.path(mydir,f))
blocks <- unlist(lapply(rfiles, roxygen2:::parse_file, env=env), recursive=FALSE)
parsed <- list(env=env, blocks=blocks)

# parse roxygen comments into rd files and output then into the "./man" directory
roc <- roxygen2:::rd_roclet()
results <- roxygen2:::roc_process(roc, parsed, mydir)
roxygen2:::roc_output(roc, results, mydir, options=list(wrap=FALSE), check = FALSE)
Run Code Online (Sandbox Code Playgroud)

您现在应该已经正确格式化myData.RdotherData.Rd文件在一次空man文件夹.


Kon*_*lph 5

roxygen2 现在原生支持此功能,但由于相关功能被标记为“内部”,因此它们不会暴露在文档索引中。

尽管如此,这些函数仍被导出并构成官方 API 的一部分:

而且,要显示结果帮助,您需要

工作流程如下:

source_env = roxygen2::env_file(sourcefile)
rd_blocks = roxygen2::parse_file(sourcefile, source_env)
help_topics = roxygen2::roclet_process(roxygen2::rd_roclet(), rd_blocks, source_env, dirname(sourcefile))
rd_code = lapply(help_topics, format)
Run Code Online (Sandbox Code Playgroud)

这会为您提供文件中的帮助主题列表。要显示其中之一,您需要 {tools} 包,它是基础 R 的一部分,但默认情况下未附加。

下面显示了如何显示文本帮助。显示 HTML 帮助有点复杂(我邀请您阅读并理解 的源代码utils:::print.help_files_with_topic,它实际显示帮助主题,并且完全没有记录

# Display first help topic. In reality you’d want to select a specific one.
topic = names(rd_code)[1L]
help_text = rd_code[[topic]]

rd = tools::parse_Rd(textConnection(help_text))
packagename = tools::file_path_sans_ext(basename(sourcefile))
helpfile = tools::Rd2txt(rd, out = tempfile('Rtxt'), package = packagename)
helptitle = gettextf('R Help on %s', sQuote(sub('\\.Rd$', '', topic)))
file.show(helpfile, title = helptitle, delete.file = TRUE)
Run Code Online (Sandbox Code Playgroud)


rmf*_*ght -4

我的回答是为什么不把分析放在一个包里呢?通过这种方式,您可以获得软件包附带的所有支持,包括文档(数据和任何自行编写的函数),并拥有自动知道数据所在位置的小插图(并且能够从 R 中列出小插图) -帮助)。你想要一个包的功能,没有包,那只是需要。相反,选择包结构进行分析,并将其用于您的优势,例如记录您的数据集。

您评论说软件包不集成Rnw文件,但我认为您错了。包的默认格式vignettesRnwSweave文件。您可以轻松地选择小插图作为包分析报告的一种方式。

我实际上在自己的分析中使用了这种方法,并在几篇博客文章中记录了它:为什么如何以及与项目模板的比较。我还在学术分析项目(做得越来越多,还不能指出示例)和个人项目(例如https://github.com/rmflight/timmysDensityhttp://rmflight .github.io/posts/2013/06/timmysDensity.html,请注意,我尚未使用包机制来查找数据)。

顺便说一句,除了将数据放入包中(只有数据包,Bioconductor有相当多)之外,我认为除了简单地roxygen2在.R 文件如上面概述的数据集。