【问题标题】:Long variable name fails in dplyrdplyr 中的长变量名失败
【发布时间】:2014-11-14 10:25:00
【问题描述】:

超过 39 个字符的字符串在 dplyr 中失败,返回错误:“错误:索引超出范围”。

是我遗漏了什么还是这是一个错误?

40 个字符不起作用:

library(dplyr)

names(iris)[5]   <- "vvv_5vvv10vvv15vvv20vvv25vvv30vvv35vvv40"

iris %>% dplyr::group_by(  vvv_5vvv10vvv15vvv20vvv25vvv30vvv35vvv40 ) %>%

  dplyr::summarise( n() )

给我错误: 错误:索引超出范围

39 个字符有效:

names(iris)[5]   <- "vvv_5vvv10vvv15vvv20vvv25vvv30vvv35vv39"

iris %>% dplyr::group_by(  vvv_5vvv10vvv15vvv20vvv25vvv30vvv35vv39 ) %>%

  dplyr::summarise( n() )

工作正常。给我这个(期望的)输出

Source: local data frame [3 x 2]

      vvv_5vvv10vvv15vvv20vvv25vvv30vvv35vv39 n()
    1                                  setosa  50
    2                              versicolor  50
    3                               virginica  5

会话信息()

> sessionInfo()
R version 3.1.1 (2014-07-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=Danish_Denmark.1252  LC_CTYPE=Danish_Denmark.1252    LC_MONETARY=Danish_Denmark.1252 LC_NUMERIC=C                   
[5] LC_TIME=Danish_Denmark.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] dplyr_0.3.0.2

loaded via a namespace (and not attached):
[1] assertthat_0.1 DBI_0.3.1      lazyeval_0.1.9 magrittr_1.0.1 parallel_3.1.1 Rcpp_0.11.3    tools_3.1.1  

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这似乎是a known issue,将在dplyr 0.3.1 中修复。来自@romainfrancois 在帖子中的回复:

    “它发生在这里 [...]

    new_groups <- lazyeval::auto_name(new_groups)
    

    因为:

    lazyeval::auto_name
    function (x, max_width = 40)
    {
        names(x) <- auto_names(x, max_width = max_width)
        x
    }
    <environment: namespace:lazyeval>
    

    "

    更新
    dplyr 0.4.0 "group_by() 支持超过 39 个字符的变量,这要归功于 lazyeval" 中的修复:

    library(dplyr)
    # Variable name with 40 characters
    names(iris)[5] <- "vvv_5vvv10vvv15vvv20vvv25vvv30vvv35vvv40"
    
    iris %>% 
      group_by(vvv_5vvv10vvv15vvv20vvv25vvv30vvv35vvv40) %>%
      summarise(n())
    #   vvv_5vvv10vvv15vvv20vvv25vvv30vvv35vvv40 n()
    # 1                                   setosa  50
    # 2                               versicolor  50
    # 3                                virginica  50
    

    【讨论】:

      猜你喜欢
      • 2018-02-20
      • 1970-01-01
      • 2019-01-21
      • 2022-01-13
      • 2011-02-28
      • 2014-08-25
      • 2023-02-01
      • 1970-01-01
      • 2021-09-21
      相关资源
      最近更新 更多