R Vignette在内部软件包功能上失败



我们在r软件包中添加了一个小插图。使用roxygen2记录软件包时,Vignette断裂给出了错误

Error in tMatrix[i, j, ] <- testVec : 
  number of items to replace is not a multiple of replacement length

但是,使用devtools::document()devtools::build_vignettes(),Vignette构建良好。

最小示例。

这是因为r在构建包装时将 LC_COLLATE设置为 C,通常是不是Github问题Yihui/Knitr#1719。因为您在最小示例中使用了makeArray()功能中的sort(),而sort()取决于LC_COLLATE,因此您将在R控制台(LC_COLLATE通常不是C(和R CMD build中获得不同的结果。复制错误:

# Copied from https://github.com/GilChrist19/vignetteExample/blob/8973dbc/vignetteExample/R/array.R#L8-L45
makeArray <- function(names = c("AA", "Aa", "aa")){

  size <- length(names)
  tMatrix <- array(data=0, dim=c(size, size, size), dimnames=list(names, names, names))
  testVec <- setNames(object = numeric(size), nm = names)
  # fill up the array
  for (i in names)
  {
    for (j in names)
    {
      j_name <- strsplit(j, split='')[[1]]
      i_name <- strsplit(i, split='')[[1]]
      ij_prod <- as.vector( outer(j_name, i_name, paste0, sep='') )
      # sort
      ij_prod <- vapply( strsplit(ij_prod, split=''),
                           function(x) {paste0(sort(x, decreasing=TRUE), collapse='')},
                           FUN.VALUE = character(1))
      for (k in ij_prod)
      {
        testVec[k] <- testVec[k]+5
      }
      # testVec[] <- testVec/sum(testVec)
      tMatrix[i,j, ] <- testVec
      testVec[] <- 0
    }
  }

  return(tMatrix)
}

Sys.setlocale('LC_COLLATE', 'C')
makeArray()

,由于我对您的功能不熟悉,我会留给您来决定如何处理sort()。我可以给出的一个提示是sort(method = 'radix')总是遵循C语言环境,因此对不同的地区更有坚固。

相关内容

  • 没有找到相关文章

最新更新