2 min read

データフレームからのベクトル出力 (R)

dplyr::selectでvector出力はできない (メモ

# デフォルトの列選択
iris[, "Species"] %>%
  head
## [1] setosa setosa setosa setosa setosa setosa
## Levels: setosa versicolor virginica
# データフレーム構造を維持
iris[, "Species", drop = F] %>%
  head
##   Species
## 1  setosa
## 2  setosa
## 3  setosa
## 4  setosa
## 5  setosa
## 6  setosa

と同じイメージでdplyr::selectでデータフレームからベクトルを取り出そうとして、よく怒られる

iris %>%
  select(Species, drop = T)
## Error: `T` must resolve to integer column positions, not a logical vector

Hadley Wickham (dplyrの作成者) が書いているとおり、dplyr::selectにはデータフレームからベクトルを出力する仕様はない

上のページを見ていると、「magrittr::extract2が便利だよ」とあった

iris %>%
  magrittr::extract2(5) %>%
  head
## [1] setosa setosa setosa setosa setosa setosa
## Levels: setosa versicolor virginica
iris %>%
  magrittr::extract2("Species") %>%
  head
## [1] setosa setosa setosa setosa setosa setosa
## Levels: setosa versicolor virginica

複数列に対する挙動が変なのでextract2の中身を見てみたら、がっかりした

iris %>%
  magrittr::extract2(4:5)
## [1] 0.2
print(extract2)
## .Primitive("[[")

参考

Extract a dplyr tbl column as a vector (Stack Overflow)

devtools::session_info()
## Session info -------------------------------------------------------------
##  setting  value                       
##  version  R version 3.5.0 (2018-04-23)
##  system   x86_64, darwin15.6.0        
##  ui       X11                         
##  language (EN)                        
##  collate  en_US.UTF-8                 
##  tz       Australia/Brisbane          
##  date     2018-05-16
## Packages -----------------------------------------------------------------
##  package    * version date       source        
##  assertthat   0.2.0   2017-04-11 CRAN (R 3.5.0)
##  backports    1.1.2   2017-12-13 CRAN (R 3.5.0)
##  base       * 3.5.0   2018-04-24 local         
##  bindr        0.1.1   2018-03-13 CRAN (R 3.5.0)
##  bindrcpp     0.2.2   2018-03-29 CRAN (R 3.5.0)
##  blogdown     0.6     2018-04-18 CRAN (R 3.5.0)
##  bookdown     0.7     2018-02-18 CRAN (R 3.5.0)
##  compiler     3.5.0   2018-04-24 local         
##  datasets   * 3.5.0   2018-04-24 local         
##  devtools     1.13.5  2018-02-18 CRAN (R 3.5.0)
##  digest       0.6.15  2018-01-28 CRAN (R 3.5.0)
##  dplyr      * 0.7.4   2017-09-28 CRAN (R 3.5.0)
##  evaluate     0.10.1  2017-06-24 CRAN (R 3.5.0)
##  glue         1.2.0   2017-10-29 CRAN (R 3.5.0)
##  graphics   * 3.5.0   2018-04-24 local         
##  grDevices  * 3.5.0   2018-04-24 local         
##  htmltools    0.3.6   2017-04-28 CRAN (R 3.5.0)
##  knitr        1.20    2018-02-20 CRAN (R 3.5.0)
##  magrittr   * 1.5     2014-11-22 CRAN (R 3.5.0)
##  memoise      1.1.0   2017-04-21 CRAN (R 3.5.0)
##  methods    * 3.5.0   2018-04-24 local         
##  pillar       1.2.1   2018-02-27 CRAN (R 3.5.0)
##  pkgconfig    2.0.1   2017-03-21 CRAN (R 3.5.0)
##  R6           2.2.2   2017-06-17 CRAN (R 3.5.0)
##  Rcpp         0.12.16 2018-03-13 CRAN (R 3.5.0)
##  rlang        0.2.0   2018-02-20 CRAN (R 3.5.0)
##  rmarkdown    1.9     2018-03-01 CRAN (R 3.5.0)
##  rprojroot    1.3-2   2018-01-03 CRAN (R 3.5.0)
##  stats      * 3.5.0   2018-04-24 local         
##  stringi      1.2.2   2018-05-02 cran (@1.2.2) 
##  stringr      1.3.1   2018-05-10 cran (@1.3.1) 
##  tibble       1.4.2   2018-01-22 CRAN (R 3.5.0)
##  tools        3.5.0   2018-04-24 local         
##  utils      * 3.5.0   2018-04-24 local         
##  withr        2.1.2   2018-03-15 CRAN (R 3.5.0)
##  xfun         0.1     2018-01-22 CRAN (R 3.5.0)
##  yaml         2.1.18  2018-03-08 CRAN (R 3.5.0)