我是roxygen的新手,我很难看到如何使用它来快速创建一个新的/自定义包.
即我想知道最低要求是制作一个名为package1using 的包devtools,roxygen2/3以便我可以运行命令
require(package1)
fun1(20)
fun2(20)
Run Code Online (Sandbox Code Playgroud)
分别生成2000和4000个随机法线
让我们举一个最简单的例子.
如果我有两个功能fun1和fun2
fun1 <- function(x){
rnorm(100*x)
}
Run Code Online (Sandbox Code Playgroud)
和
fun2 <- function(y){
rnorm(200*y)
}
Run Code Online (Sandbox Code Playgroud)
params是数字,返回值是数字.我很确定这不是一个S3方法,让我们调用标题fun1和fun2 ....我不太确定我需要提供的其他信息.我可以将fun1和fun2放在单独的.R文件中并添加abit #'但不确定包含roxygen的所有相关要求,也不确定要包含哪些相关requiremetns以及如何使用它来创建rd文档以与包一起使用.我假设名称空间只有名称fun1和fun2?包裹描述只是一些与我有关的通用信息......以及包裹的功能?
任何一步一步的指南都会很高兴收到.
编辑:以下是我开始的距离......
我可以得到以下内容来创建一个pacakge ...但是不能使用roxygen来制作文档......
package.skeleton(list = c("fun1","fun2"), name = "package1")
Run Code Online (Sandbox Code Playgroud)
这里是我不确定我是否错过了一堆步骤......
roxygenise("package1")
Run Code Online (Sandbox Code Playgroud)
因此,当尝试安装时,我收到以下错误消息
system("R CMD INSTALL package1")
* installing to library ‘/Library/Frameworks/R.framework/Versions/2.15/Resources/library’
* installing *source* package ‘package1’ ...
** R
** preparing package for lazy loading
** help
Warning: /path.to.package/package1/man/package1-package.Rd:32: All text must be in …Run Code Online (Sandbox Code Playgroud) 要生成R文档文件(.Rd),我使用Rt 3.0.2,Linux 3.11,devtools 1.5,roxygen2 4.0.1的软件包RStudio/Document选项.
我想在文档文件中描述函数的多个参数,例如在此示例中:
\arguments{
\item{arg1, arg2}{Description}
}
Run Code Online (Sandbox Code Playgroud)
在这里,参数arg1和arg2由一个空格字符分割.这导致HTML版本中的自动换行符.
使用RStudio/Document选项,两个参数之间的空格将第二个参数放在"描述"部分中,例如:
#' @param arg1, arg2 Description
Run Code Online (Sandbox Code Playgroud)
会变成
\arguments{
\item{arg1,}{arg2 Description}
}
Run Code Online (Sandbox Code Playgroud)
我想出将两个参数保留在'参数'部分内的唯一方法是不按空格分割,例如:
#' @param arg1,arg2 Description
Run Code Online (Sandbox Code Playgroud)
会变成
\arguments{
\item{arg1,arg2}{Description}
}
Run Code Online (Sandbox Code Playgroud)
这是不希望的,因为有了更多的参数,带有参数的'column'会占用大量空间.我试图逃避这个空间,\或者\\包括所有的争论\code{...},但没有一个按预期工作.
有没有办法在我的目标中创建输出?也许是一些引入空间的逃脱角色?
谢谢.
斯文
几个月前我使用'package.skeleton()'生成.Rd帮助文件.我已经编辑了这些文件,我也更改了功能,删除了一些功能,添加了其他功能.是否有自动更新Rd文件的功能?
更新
一个很好的软件包刚刚发布,名为Rd2roxygen,由作者Yihui Xie在他的博客上描述.
顾名思义,这个包允许用户追溯地将当前包含在.Rd中的文档插入到.R文件中.对于学习roxygen和将目前正在开发的软件包转换为R软件包而言,这听起来很有前景.呜呜.谢谢一惠!
根据Joshua和Yihui的答案,答案似乎是: roxygen允许根据源.R代码的变化自动更新Rd文件等,如果我目前不使用roxygen,Rd2roxygen可以帮助我迁移.
Roxygen使我的工作变得更加容易,并且在大多数情况下都非常直观.我从未弄清楚的一件事是如何在@examples部分保留缩进以便roxygenize("myPackage")包含结果
#' @examples
#' sapply(1:10, function(i){
#' x <- rbind(matrix(rnorm(20), 10, 2),
#' matrix(rnorm(20), 10, 2) + i)
#' myFunc(x)
#' }
Run Code Online (Sandbox Code Playgroud)
将会
\examples{sapply(1:10, function(i){
x <- rbind(matrix(rnorm(20), 10, 2),
matrix(rnorm(20), 10, 2) + i)
myFunc(x)
}}
Run Code Online (Sandbox Code Playgroud)
代替
\examples{sapply(1:10, function(i){
x <- rbind(matrix(rnorm(20), 10, 2),
matrix(rnorm(20), 10, 2) + i)
myFunc(x)
}}
Run Code Online (Sandbox Code Playgroud)
这是一个小细节,但它使所有但最简单的例子不必要地难以阅读,所以如果有人可以帮助我,我会很感激.
编辑:此错误已在更高版本的roxygen中得到纠正.
我收到了一个roxygenize()我无法理解的错误.我有一个我的杂项函数包,其中.Rd文件是通过roxygen生成的.
错误是Error: titlerequires a value,这表明没有@title标签.但是文件中有一个@title标签kmmisc-package.R,所以我不确定是什么问题.
kmmisc-package.R 包含:
##' Miscellaneous Functions
##'
##' \tabular{ll}{
##' Package: \tab kmmisc\cr
##' Type: \tab Package\cr
##' Version: \tab 0.1-2\cr
##' Date: \tab 2011-10-06\cr
##' License: \tab GPL-2\cr
##' LazyLoad: \tab yes\cr
##' LazyData: \tab yes\cr
##' }
##'
##' @author Me \email{my@@email}
##'
##' Maintainer: Me \email{my@@email}
##'
##' @name kmmisc-package
##' @docType package
##' @title KM Misc
##' @keywords package
##'
NULL
Run Code Online (Sandbox Code Playgroud)
我正在使用R …
我有一个功能,除了attr任何R对象的唯一广告.基础演示:
#' Setter function
#' @param x an R object
#' @param value a character value to set
#' @export
`foo<-` <- function(x, value){
attr(x, 'foo') <- value
return(x)
}
Run Code Online (Sandbox Code Playgroud)
这有点像魅力,除了生成一个好的Rd文件,相关部分:
\usage{
foo(var, value) <- value
}
Run Code Online (Sandbox Code Playgroud)
当然,它会在R CMD check应该运行时触发警告foo(var) <- value.
任何提示都会非常有意义!
更新:感谢richierocks似乎有一个修复
我有一个R的软件包我一直在Linux下开发,而且我在Windows下测试它的时候已经到了.
文档是使用roxygen完成的,我正在使用cygwin来构建软件包.
问题是,当我roxygenise('test-package'),roxygen \usage将文档的部分截断为一个字符.它对一些但不是我的所有功能都这样做,我无法弄清楚这种模式.
roxygenise('test-package')在Linux或Windows下运行相同的命令(即从R提示符)时不会发生这种情况- 只是在Windows下的Cygwin(使用R devtools +来自Windows的命令提示符对我来说不是一个选项 - 它是Makefile的一个大项目的一部分等等).
在所有情况下,我使用roxygen v2.2.2.
对于具有默认参数的任何函数,都会出现这种情况.
我把它归结为一个可重复的例子,尽可能地减少以解决问题:
来自R:
# this function used to trim strings, but I've stripped it right down
# to eliminate it as a cause of the problem
trim <- function(x='asdf')
{
return( x )
}
package.skeleton('test')
Run Code Online (Sandbox Code Playgroud)修改trim.R(在test/R中)并将以下roxygen添加到顶部,因此文件如下所示:
#' trim white spaces from a string
#'
#' @param x string or vector of strings to trim
#' @return x trimmed.
#' @export
trim …Run Code Online (Sandbox Code Playgroud)我正在编写一个用于访问私有 API 的小型便利包,并且正在使用httr函数来处理请求。我还使用 Roxygen 来处理文档等。我正在导入httr这样的函数:
#' Get a page of data from the specified endpoint.
#' @keywords internal
#' @importFrom httr GET
#'
get_data <- function(url, headers, page_number) {
# Add querystring for page
url_with_page <- paste0(url, "?page=", page_number)
message("Downloading: ", url_with_page)
# Get API response
response <- GET(url_with_page, headers)
return(response)
}
Run Code Online (Sandbox Code Playgroud)
但是,当您尝试在没有预加载包的情况下运行包时,出现命名空间错误:
Error in get_data(url, headers, 1) :
could not find function "GET"
Run Code Online (Sandbox Code Playgroud)
我通常会尊重哈德利在这类事情上的专业知识,但这是否是使用该Depends领域以及/而不是使用该领域的好案例Imports?
编辑:我的 NAMESPACE …
我正在构建自己的包,但我一直遇到编码问题,因为我的包中的函数具有非英语(非 ASCII)字符。
从本质上讲,韩文字符是我包中许多功能的一部分。示例函数:
library(rvest)
sampleprob <- function(url) {
# sample url: "http://dart.fss.or.kr/dsaf001/main.do?rcpNo=20200330003851"
result <- grepl("?????? ??", html_text(read_html(url)))
return(result)
}
Run Code Online (Sandbox Code Playgroud)
但是,在安装软件包时,我遇到了编码问题。
我创建了一个示例包 ( https://github.com/hyk0127/KorEncod/ ),只有一个函数(如上所示),并将其上传到我的 github 页面上作为一个可重现的示例。我运行以下代码进行安装:
library(devtools)
install_github("hyk0127/KorEncod")
Run Code Online (Sandbox Code Playgroud)
以下是我看到的错误消息
Error : (converted from warning) unable to re-encode 'hello.R' line 7
ERROR: unable to collate and parse R files for package 'KorEncod'
* removing 'C:/Users/myname/Documents/R/win-library/3.6/KorEncod'
* restoring previous 'C:/Users/myname/Documents/R/win-library/3.6/KorEncod'
Error: Failed to install 'KorEncod' from GitHub:
(converted from warning) installation of package ‘C:/Users/myname/AppData/Local/Temp/RtmpmS5ZOe/file48c02d205c44/KorEncod_0.1.0.tar.gz’ had non-zero exit status
Run Code Online (Sandbox Code Playgroud)
错误信息 aboutline 7 …
我有 R6Class 的文档:
#' Root component that don't have parent,
#'
#' It should not be used directly, only using \code{\link{pkg::component}} function.
#'
#' @name BaseComponent
#' @importFrom R6 R6Class
#' @docType class
#' @keywords components, architecture, structure
Run Code Online (Sandbox Code Playgroud)
和氧气显示警告:
警告:[c:\projects\pkg\R\components.R:1] @title 缺少名称
我不知道为什么它显示第 1 行,我的代码不在第 1 行。
添加 @title 不会改变任何内容,我不断收到此警告。