【问题标题】:R Vignette Fails on Internal Package FunctionR Vignette 在内部包功能上失败
【发布时间】:2019-05-24 19:21:38
【问题描述】:

我们正在为我们的 R 包添加一个小插图。使用roxygen2 记录包时,小插图会中断并给出错误

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

但是,使用devtools::document()devtools::build_vignettes(),小插图构建得很好。

位于here的最小示例。

【问题讨论】:

    标签: r devtools r-package roxygen2 vignette


    【解决方案1】:

    这是因为 R 在构建软件包时将LC_COLLATE 设置为C,这通常不是常见操作系统的语言环境的整理顺序,例如您在 Github 问题中提到的那些@ 987654321@。因为you used sort() 在您的最小示例中的makeArray() 函数中,而sort() 取决于LC_COLLATE,您将在R 控制台(其中LC_COLLATE 通常不是C)和@987654331 中得到不同的结果@。重现错误:

    # 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 语言环境,因此对不同的语言环境更加健壮。

    【讨论】:

      猜你喜欢
      • 2021-10-05
      • 2018-12-06
      • 2020-02-02
      • 2020-10-19
      • 2021-12-29
      • 1970-01-01
      • 2022-09-01
      • 2022-12-17
      • 2020-05-23
      相关资源
      最近更新 更多