В чем разница между использованием select + unlist из пакета dplyr и знаком доллара? - PullRequest
0 голосов
/ 05 января 2019

Я проходил онлайн-курс, на котором инструктор всегда делает следующее, скажем, для получения, скажем, столбца Col1 из data.frame объекта Dat:

library(dplyr)
unlist(select(Dat, Col1))

Почему бы просто не запустить Dat$Col1? Я замечаю разницу в «представлении» обоих результатов, но есть ли другое существенное расхождение между этими двумя формами? Любая операция приведет к тому же продукту для обоих?

1 Ответ

0 голосов
/ 06 января 2019

(Публикация комментариев в вики сообщества).

Это не вполне эквивалент - unlist(select(.)) сохраняет (возможно, нежелательные) имена.

dd <- data.frame(Col1=c("abc","def"))
str(unlist(select(dd,Col1)))
##  Factor w/ 2 levels "abc","def": 1 2
##  - attr(*, "names")= chr [1:2] "Col11" "Col12"
str(dd$Col1)
##  Factor w/ 2 levels "abc","def": 1 2

Ваш инструктор, вероятно, просто фанат tidyverse (@RichScriven); pull(Dat, Col1) или (для крайней "аккуратности") Dat %>% pull(Col1) будет более идиоматичным (@Henrik). Dat$Col1 или Dat[["Col1"]] будут эквивалентами base-R (первый более удобен для интерактивного использования, последний несколько безопаснее для целей программирования, поскольку не будет выполнять завершение имени).

Вряд ли это имеет значение, но подходы к приливу намного медленнее.

microbenchmark(dd$Col1,dd[["Col1"]],pull(dd,Col1),unlist(select(dd,Col1)))
Unit: microseconds
                     expr     min        lq       mean    median       uq
                  dd$Col1   5.296   10.9630   14.86871   13.4040   17.160
             dd[["Col1"]]   7.870    9.6535   15.18874   11.8270   16.635
           pull(dd, Col1)  44.160  108.7625  128.89342  117.8415  136.890
 unlist(select(dd, Col1)) 601.480 1132.8240 1436.44178 1214.4420 1378.141
      max neval cld
   31.036   100  a 
   88.842   100  a 
  422.462   100  a 
 8796.964   100   b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...