我该如何妥善处理管道?

时间:2018-05-17 05:36:36

标签: r magrittr

尝试使magrittr pinping函数更加优雅和可读。但是,我能做的最好的事情如下。我怎样才能改进它?请找到参考代码,并提出建议。的由于

DF <- data.frame(a=letters[1:10], b=1L:10L, c=1.01:1.10, d=rep(TRUE,10), e=10L:1L)

cols <- lapply(DF,class) %>% unlist()
cols[which(cols %in% c("integer","numeric"))]

#        b         c         e 
#"integer" "numeric" "integer"
#
# yet, I'd still like to get rid of the variables.  
我能在管道上做的最好就是这样。试过%$%,但失败了。

(lapply(DF,class) %>% unlist)[
which(lapply(DF,class) %>% unlist() =="integer" |
      lapply(DF,class) %>% unlist() =="numeric")]

我可以这样做吗?

lapply(DF,class) %>% unlist %$% .[which(. %in% c("integer","numeric"))]
# of course, it doesn't work

1 个答案:

答案 0 :(得分:3)

我们可以使用Filter中的base R来删除包含课程integernumeric

的列
Filter(function(x) !class(x) %in% c("integer", "numeric"), DF)

保留这些变量

Filter(function(x) class(x) %in% c("integer", "numeric"), DF)

或使用%>%,获取class列的map,检查它是%in%,'整数'还是'数字',否定({ {1}} - 仅当我们需要删除这些变量时)和!基于逻辑索引的列

magrittr::extract

或使用library(tidyverse) map_chr(DF, class) %>% `%in%`(c("integer", "numeric")) %>% #`!` %>% #in case to remove those columns extract(DF, .) 删除列

discard

discard(DF, ~class(.x) %in% c("integer", "numeric")) 保留列

keep