Pergunta

então eu decidi que iria colocar minhas poucas funções R em um pacote e eu estou lendo / aprendizagem Escrita R Extensão .

obviamente reclama uma quantidade de coisas que eu não estou fazendo certo.

depois de pesquisar bastante, eu estou disparando algumas perguntas aqui, este é sobre estilo testar: Eu estou usando runIt e gosto tendo os testes o mais próximo possível para o código a ser testado. Desta forma, eu não vou esquecer sobre os testes e eu uso os testes como parte da documentação técnica.

Por exemplo:

fillInTheBlanks <- function(S) {
  ## NA in S are replaced with observed values

  ## accepts a vector possibly holding NA values and returns a vector
  ## where all observed values are carried forward and the first is
  ## carried backward.  cfr na.locf from zoo library.
  L <- !is.na(S)
  c(S[L][1], S[L])[1 + cumsum(L)]
}

test.fillInTheBlanks <- function() {
  checkEquals(fillInTheBlanks(c(1, NA, NA, 2, 3, NA, 4)), c(1, 1, 1, 2, 3, 3, 4))
  checkEquals(fillInTheBlanks(c(1, 2, 3, 4)), c(1, 2, 3, 4))
  checkEquals(fillInTheBlanks(c(NA, NA, 2, 3, NA, 4)), c(2, 2, 2, 3, 3, 4))
}

mas linhas questões R CMD check NOTA, como este:

test.fillInTheBlanks: no visible global function definition for
  ‘checkEquals’

e ele reclama sobre mim não documentar as funções de teste.

Eu realmente não quero adicionar documentação para as funções de teste e eu definitivamente preferiria não ter que adicionar uma dependência ao pacote RunIt.

Como você acha que eu deveria olhar para esta questão?

Foi útil?

Solução

Onde você está colocando seus testes de unidade? Você não pode querer colocá-los para o diretório R. Uma abordagem mais padrão é colocá-los sob inst\unitTests. Ter um olhar para desta página R-wiki sobre a configuração.

Como alternativa, você pode especificar quais arquivos serão exportados no espaço de nomes e, por extensão, o que funções devem e não devem ser documentados.

Além disso, o ideal é que você deve ter seus testes executados quando R CMD VERIFICAÇÃO é chamado; isso é parte do projeto. Nesse caso, você deve criar um script de teste para chamar seus testes em um diretório tests separado. E você vai precisar carregar o pacote RunIt em que o script (mas você não precisa para torná-lo uma dependência de seu pacote).

Editar 1:

Quanto à sua falha porque não consegue encontrar a função checkEquals: Eu mudaria você função a ser assim:

test.fillInTheBlanks <- function() {
  require(RUnit)
  checkEquals(fillInTheBlanks(c(1, NA, NA, 2, 3, NA, 4)), c(1, 1, 1, 2, 3, 3, 4))
  checkEquals(fillInTheBlanks(c(1, 2, 3, 4)), c(1, 2, 3, 4))
  checkEquals(fillInTheBlanks(c(NA, NA, 2, 3, NA, 4)), c(2, 2, 2, 3, 3, 4))
}

Dessa forma, o pacote é carregado quando a função é chamada, ou ele vai informar ao usuário que o pacote é necessário.

Editar 2:

A partir "Escrever R Extensions" :

Note que todos os objetos em nível de usuário em um pacote deve ser documentado; se um pkg pacote contém objetos em nível de usuário que são apenas para uso “interno”, deve fornecer um arquivo pkg-internal.Rd quais os documentos todos os objectos, e afirma claramente que estes não são destinadas a ser chamado pelo usuário. Veja por exemplo as fontes de grade pacote na distribuição de R por um exemplo. Note que os pacotes que usam objetos internos extensivamente deve esconder os objetos em um espaço de nome, quando eles não precisam ser documentadas (ver espaços nome do pacote).

Você pode usar o arquivo pkg-internal.Rd como uma opção, mas se você pretende ter muitos objetos escondidos, isso geralmente é tratada nas declarações no espaço de nomes.

Outras dicas

Você quis carregar o pacote RUnit?

Sua melhor aposta é provavelmente a olhar para um pacote contendo código existente usando RUnit.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top