Публикация пакета R без определения аргумента функции - PullRequest
1 голос
/ 21 мая 2019

В настоящее время я делаю пакет для кого-то из его кода.При запуске cmdcheck на R для загрузки пакета в CRAN я продолжаю сталкиваться с проблемой: отсутствует аргумент "ftab", по умолчанию он отсутствует.Есть ли способ для проверки игнорировать это?

Я пробовал несколько вещей, таких как установка ftab = NULL, я установил ftab = ftab <-rbind (c (20,10,20), c (15,15,20)) и ftab= NA. </p>

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 ().

1 Ответ

0 голосов
/ 21 мая 2019

Это из-за вашего @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 действительно корректно в зависимости от ваших функциональных требований.То есть, если вы реализуете какой-то известный процесс / алгоритм, возьмите ранее известный или рассчитанный вручную / проверенный ввод и вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...