【问题标题】:'as.tibble' causes error in tibble 2.0.1 but not 1.4.2'as.tibble' 在 tibble 2.0.1 但不是 1.4.2 中导致错误
【发布时间】:2019-07-02 17:05:37
【问题描述】:

我编写了一个函数部分,其中将矩阵转换为小标题。这在 tibble 1.4.2 中没有问题,但在 2.0.1 中会导致错误。

导致错误的代码如下

library(tibble)
library(magrittr)
testmerge <- matrix( data = NA, ncol = 6 + 1, nrow =  0) %>%
      as.tibble

错误信息如下

我可以通过以下方式解决问题

testmerge <- matrix( data = NA, ncol = 6 + 1, nrow =  0) %>%
  as.data.frame() %>%
      as_tibble

但这似乎有点啰嗦。

是什么导致了这种变化?我怎样才能轻松地以空列结束?

【问题讨论】:

  • as.tibbleas_tibble(两者之一)来自 dplyr,不是吗?还有一个似乎已被弃用。
  • @NelsonGon 确实是tibble::as.tibble,它只是调用UseMethod("as_tibble"),所以这不应该是问题
  • 见 tibble github issue #447

标签: r tibble


【解决方案1】:

您需要指定.name_repair;见?as_tibble:

library(tibble)
library(magrittr)
sessionInfo()
#> R version 3.5.2 (2018-12-20)
#> Platform: x86_64-pc-linux-gnu (64-bit)
#> Running under: Ubuntu 18.04.1 LTS
#> 
#> Matrix products: default
#> BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
#> LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
#>  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
#>  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
#>  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
#> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> other attached packages:
#> [1] magrittr_1.5 tibble_2.0.1
#> 
#> loaded via a namespace (and not attached):
#>  [1] Rcpp_1.0.0      digest_0.6.18   crayon_1.3.4    rprojroot_1.3-2
#>  [5] backports_1.1.2 evaluate_0.11   pillar_1.3.1    rlang_0.3.1    
#>  [9] stringi_1.2.4   rmarkdown_1.10  tools_3.5.2     stringr_1.3.1  
#> [13] yaml_2.2.0      compiler_3.5.2  pkgconfig_2.0.2 htmltools_0.3.6
#> [17] knitr_1.20

正如您所描述的,您的代码在 tibble_1.4.2 上对我来说工作得很好,但是在升级到 tibble_2.0.1 之后,我最终遇到了与您相同的错误,但带有包含句子 @987654327 的信息稍微丰富的消息@:

testmerge <- matrix( data = NA, ncol = 6 + 1, nrow =  0) %>%
    as_tibble()
#> Error: Columns 1, 2, 3, 4, 5, … (and 2 more) must be named.
#> Use .name_repair to specify repair.
testmerge <- matrix( data = NA, ncol = 6 + 1, nrow =  0) %>%
    as_tibble(.name_repair = "unique")
#> New names:
#> * `` -> `..1`
#> * `` -> `..2`
#> * `` -> `..3`
#> * `` -> `..4`
#> * `` -> `..5`
#> * … and 2 more
testmerge
#> # A tibble: 0 x 7
#> # … with 7 variables: ..1 <lgl>, ..2 <lgl>, ..3 <lgl>, ..4 <lgl>,
#> #   ..5 <lgl>, ..6 <lgl>, ..7 <lgl>

更新,在 cmets 中,@NelsonGon 链接到 GitHub issue,对此的讨论似乎导致了这种新行为。

【讨论】:

  • 谢谢!我还看到您可以使用“.name_repair = make.names”,尽管这些名称不是唯一的
猜你喜欢
  • 2019-02-14
  • 2013-11-24
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 2021-08-04
相关资源
最近更新 更多