我一直在服用的在线课程中教师总是做以下获得,也就是说,该列Col1从一个data.frame对象Dat:
library(dplyr)
unlist(select(Dat, Col1))
Run Code Online (Sandbox Code Playgroud)
为什么不简单地跑Dat$Col1?我注意到两种结果的"表述"存在差异,但这两种形式之间是否存在其他重大差异?任何操作都会为两者产生相同的产品?
(将评论发布为社区维基.)
这些并不完全等同 - 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
Run Code Online (Sandbox Code Playgroud)
你的导师可能只是tidyverse的粉丝(@RichScriven); pull(Dat, Col1)或者(对于极端的"整洁")Dat %>% pull(Col1)会更加惯用(@Henrik).Dat$Col1或者Dat[["Col1"]]是基本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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |