我正在开发一个提供名为"Foo"的S3类的包.它还提供了一种"as"方法,用于将其强制转换为名为"Bar"的(其他人)S4类.我的代码看起来像这样:
#' ...
setOldClass("Foo")
#' ...
setAs("Foo", "SpatialPointsDataFrame", function(from) {
# do stuff and return a SpatialPointsDataFrame
})
Run Code Online (Sandbox Code Playgroud)
编辑我试过这个:
#' ...
#' @name as
#' @export
setAs("Foo", "SpatialPointsDataFrame", function(from) {
# do stuff and return a SpatialPointsDataFrame
})
Run Code Online (Sandbox Code Playgroud)
但是我从R CMD检查得到这个:
检查是否可以使用声明的依赖项加载名称空间...警告namespaceExport(ns,exports)中的错误:undefined exports:as Calls:loadNamespace - > namespaceExport Execution halted
命名空间必须只能加载基础命名空间:否则如果命名空间被保存的对象加载,则会话将无法启动.
可能需要在NAMESPACE文件中声明一些导入.
在一个单独的.R文件中,我有:
#' @importClassesFrom sp SpatialPointsDataFrame
Run Code Online (Sandbox Code Playgroud)
我正在使用hadley的devtools包,所以我猜它是roxygen2.这就是我做的:
R> document("MyPackage")
Run Code Online (Sandbox Code Playgroud) 假设我正在编写一个包含两个函数的小R包,除了一个之外,它们具有相同的参数.这是一个例子:
fct1 <- function(r, K){...}
fct2 <- function(r, p, K){...}
Run Code Online (Sandbox Code Playgroud)
在我的第一个函数的roxygen2文档中,我使用以下标记:
#' @param r description of argument r
#' @param K description of argument K
Run Code Online (Sandbox Code Playgroud)
对于第二个函数,我使用以下标记:
#' @param p description of argument p
#' @inheritParams fct1
Run Code Online (Sandbox Code Playgroud)
在使用roxygenize处理我的代码之后,函数fct2的.Rd文件按以下顺序显示参数:p,r,K.我希望它们的顺序与使用部分中的顺序相同,即:r, p,K.如何在不手动更改.Rd文件的情况下获取此订单?
我坚持使用@inheritParams来避免复制和粘贴.
谢谢!
我有一个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)我创建了一个包并将其推送到github,这样devtools功能install_github()函数便于安装.即github repo文件结构是这样的,DESCRIPTION并且NAMESPACE它们/R和/man包含每个函数的*.R文件和*.Rd文件的文件夹一起位于顶部.
我现在想通过添加新功能对它进行一些升级.
我#'在每个新.R文件中都有函数上面的所有相关的roxygen type()文本,但是找不到roxygen2或者相关的包函数有助于读取.R文件并编写相关.Rd文件,希望这不是太难...我想我要求的是,是否可以将一个文件加热到另一个现有的包中?这样它也可以更新DESCRIPTION,NAMESPACE文件.所以我可以添加,提交并将所有这些更改推送到github上的远程仓库?
创建R包时,至少有两种方法可用于引入导入包中的函数.
要么,
无论何时调用它,都使用双冒号运算符明确命名该函数package::function.
直接或通过roxygen标签添加importFrom(package, function)到NAMESPACE文件中#' @importFrom package function.
每种方法有哪些优缺点?
每种语法实现的技术差异是否存在?
我正在尝试编写我的第一个R包.包中的函数取决于RCurl包中的getURL()函数.我按照以下教程:http: //r-pkgs.had.co.nz/和 http://hilaryparker.com/2014/04/29/writing-an-r-package-from-scratch/
我安装了RTools,devtools和roxygen2来编写文档和构建软件包.
我的包名是"waterml".在我的包中,我有文件夹R,包含3个文件GetSites.R,GetVariables.R,GetValues.R.每个文件都有一个功能:
#' GetSites
#' @import XML
#' @importFrom RCurl getURL
#' This function gets the table of sites from the WaterML web service
#' @param server The URL of the web service ending with .asmx,
#' for example: http://worldwater.byu.edu/interactive/rushvalley/services/cuahsi_1_1.asmx
#' @keywords waterml
#' @export
#' @examples
#' GetSites("http://worldwater.byu.edu/interactive/rushvalley/services/cuahsi_1_1.asmx")
GetSites <- function(server) {
sites_url <- paste(server, "/GetSitesObject", sep="")
text <- RCurl::getURL(sites_url)
doc <- xmlRoot(xmlTreeParse(text, getDTD=FALSE, useInternalNodes = TRUE))
return(doc)
}
Run Code Online (Sandbox Code Playgroud)
现在,我尝试构建包:
library(devtools)
document()
Run Code Online (Sandbox Code Playgroud)
document()步骤完成且没有错误.现在我跑: …
我想在R包中包含一个Fortran子例程.我一直只使用devtools和roxygen构建包(所以我的知识可能非常有限).我收到一个错误,阻止我在安装包之后安装它不是Win32应用程序...
我使用的是Rtools 3.3.我的会话信息:
> sessionInfo()
R version 3.2.2 (2015-08-14)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] roxygen2_5.0.1 devtools_1.9.1
loaded via a namespace (and not attached):
[1] magrittr_1.5 tools_3.2.2 Rcpp_0.12.1 memoise_0.2.1 stringi_1.0-1 stringr_1.0.0 digest_0.6.8
Run Code Online (Sandbox Code Playgroud)
要初始构建包,我运行这个:
library(devtools)
library(roxygen2)
setwd("C:/panterasBox")
create("myPack")
setwd("C:/panterasBox/myPack")
dir.create("C:/panterasBox/myPack/src")
Run Code Online (Sandbox Code Playgroud)
这是fortran代码,在/src文件中保存为myFunc.f :
subroutine myFunc(x)
implicit …Run Code Online (Sandbox Code Playgroud) 我有以下文件cumsum_bounded.cpp
#include <Rcpp.h>
using namespace Rcpp;
//' Cumulative sum.
//' @param x numeric vector
//' @param low lower bound
//' @param high upper bound
//' @param res bounded numeric vector
//' @export
//' @return bounded numeric vector
// [[Rcpp::export]]
NumericVector cumsum_bounded(NumericVector x, double low, double high) {
NumericVector res(x.size());
double acc = 0;
for (int i=0; i < x.size(); ++i) {
acc += x[i];
if (acc < low) acc = low;
else if (acc > high) acc = high;
res[i] …Run Code Online (Sandbox Code Playgroud) 我正在RStudio中的一个软件包上运行CMD检查,其中的一部分分析@examples了内联Roxygen文档中的内容。
我收到此错误:
checking examples ... ERROR
Running examples in ‘packagename-Ex.R’ failed
The error most likely occurred in:
> base::assign(".ptime", proc.time(), pos = "CheckExEnv")
> ### Name: checkDate
> ### Title: Ensure that a date string is a valid date
> ### Aliases: checkDate
>
> ### ** Examples
>
> checkDate("2017-05-06")
Error: could not find function "checkDate"
Run Code Online (Sandbox Code Playgroud)
在我的.R文件中,文档定义为:
#' Ensure that a date string is a valid date
#'
#' @param dateString A string (eg. "2017-12-04").
#' @return …Run Code Online (Sandbox Code Playgroud) 包开发初学者在这里!
我正在尝试第一次将一些代码转换为本地R包。我使用制作了一个软件包usethis::create_package(),并使用添加了文档devtools::document()。
现在,在玩了一段时间后,尝试使用安装最新版本时遇到了以下错误devtools::install():
Error: HTTP error 403.
API rate limit exceeded for [my IP]. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)
Rate limit remaining: 0/60
Rate limit reset at: 2019-03-18 16:32:05 UTC
To increase your GitHub API rate limit
- Use `usethis::browse_github_pat()` to create a Personal Access Token.
- Use `usethis::edit_r_environ()` and add the token as `GITHUB_PAT`.
Run Code Online (Sandbox Code Playgroud)
如果使用,问题仍然存在devtools:install_local("my_folder_name")。真正令我困惑的是,我试图通过安装位于本地文件夹中的软件包来达到GitHub速率限制。 …