我目前正在使用代码为某人制作包装。在R上运行cmdcheck将程序包上传到CRAN时,我一直遇到问题:参数“ ftab”丢失,没有默认值。有没有一种方法可以使检查忽略这一点?
我尝试了一些操作,例如设置ftab = NULL,设置了ftab = ftab <-rbind(c(20,10,20),c(15,15,20)),而ftab = NA。
chi.stat<-function(ftab)
{
tot<-sum(ftab);
expv<-outer(rowSums(ftab)/tot, colSums(ftab)/tot, '*')*tot;
signal<-(colMeans(expv)<eps)*(1:dim(ftab)[2]);
indx<-setdiff(signal,0);
ftemp<-((ftab-expv)^2/expv)
chi.val<-ifelse(length(indx)==0, sum(ftemp), sum(ftemp[,-indx]));
return(chi.val);
}
编辑: 问题可以在这里的某个地方吗?
#' chi.stat function
#'
#' This function... (description here)
#' @param ftab (argument here)
#' @return chi.val (return value)
#' @export
#' @examples
#' chi.stat()
我也尝试在示例中输入默认参数,这种方法可以解决无默认问题,但会产生一些不同的问题。另外,我觉得好像不需要默认参数,但是我不确定。如果需要,我可以发布另一个调用chi.stat()的函数。
答案 0 :(得分:0)
这是由于您的@examples
部分所致。将定义更改为:
#' chi.stat function
#'
#' This function... (description here)
#' @param ftab (argument here)
#' @param eps numeric, a tolerance factor; default 1e-9
#' @return chi.val (return value)
#' @export
#' @examples
#' \dontrun{
#' chi.stat()
#' }
chi.stat<-function(ftab, eps = 1e-9)
{
tot<-sum(ftab);
expv<-outer(rowSums(ftab)/tot, colSums(ftab)/tot, '*')*tot;
signal<-(colMeans(expv)<eps)*(1:dim(ftab)[2]);
indx<-setdiff(signal,0);
ftemp<-((ftab-expv)^2/expv)
chi.val<-ifelse(length(indx)==0, sum(ftemp), sum(ftemp[,-indx]));
return(chi.val);
}
防止cmdcheck尝试运行示例部分中的所有代码。 (我在函数参数中添加了默认的eps
,以解决另一个问题。如果需要,可以将其定义为函数中的常量。)
更好,请在ftab
部分中手动构建适当的@examples
参数(不要使用\dontuse
)。这是一种CI测试,每次您执行cmdcheck和/或构建程序包时,它将运行所有代码并抱怨错误。
#' chi.stat function
#'
#' This function... (description here)
#' @param ftab (argument here)
#' @param eps numeric, a tolerance factor; default 1e-9
#' @return chi.val (return value)
#' @export
#' @examples
#' m <- matrix(1:4, nrow = 2)
#' chi.stat(m)
#' # [1] 0.07936508
是否在@examples
部分中包含输出是个人喜好的问题。如果您想进一步进行CI测试,请执行类似的操作
#' @examples
#' m <- matrix(1:4, nrow = 2)
#' ret <- chi.stat(m)
#' stopifnot(abs(ret - 0.07936508) < 1e-9)
它可能不能代替完整的测试,但是如果您没有进行正式的单元测试(也许通过软件包testthat
文件夹中的./tests/testthat/
),那总比没有好。
注意:根据您的功能要求,确保0.079数字实际上是正确的。也就是说,如果您要实现一些已知的流程/算法,请采用以前已知的或手工计算/验证的输入和输出。