如何...在dplyr链接中的....sese..statement r

时间:2017-08-04 16:14:18

标签: r dplyr tidyverse

我的问题是如何在dplyr链中使用if..else..statement? 例如:

select.vars <- function(data, price=TRUE ){
    diamonds %>% {if (price) select(price) else select(carat)}
}
select.vars(diamonds)

我收到了错误:

Error in UseMethod("select_") : 
  no applicable method for 'select_' applied to an object of class "logical"

这是一个毫无意义的功能。仅用于说明目的...... 非常感谢。

2 个答案:

答案 0 :(得分:1)

我们可以使用if/else

中的select
select.vars <- function(data, price=TRUE){
     diamonds %>% 
              select(if(price) "price" else "carat")
 }

resprice <-  select.vars(diamonds)
rescarat <- select.vars(diamonds, FALSE)
head(rescarat)
# A tibble: 6 x 1
#  carat
#  <dbl>
#1  0.23
#2  0.21
#3  0.23
#4  0.29
#5  0.31
#6  0.24

head(resprice)
# A tibble: 6 x 1
#  price
#  <int>
#1   326
#2   326
#3   327
#4   334
#5   335
#6   336

答案 1 :(得分:0)

我只是想通了。只需添加.for每个选择。

select.vars <- function(data, price=TRUE ){
    diamonds %>% {if (price) select(., price) else select(., carat)}
}