向自定义管道函数添加列

3

我是一个新手,想要利用 R 中的 %>% 来创建函数。

给定以下数据:

sim <- tribble(~x,~n,1,1,1,2,1,3)

我想创建一个像这样添加列的函数。
>sim <- sim %>% mutate(sum = x+n)
>sim
# A tibble: 3 x 3
      x     n   sum
  <dbl> <dbl> <dbl>
1     1     1     2
2     1     2     3
3     1     3     4

这是目前为止的进展。
addr <- function(tbl, x, n){tbl <- mutate(sumr=tbl$x+tbl$n)}
sim <- tribble(~x,~n,1,1,1,2,1,3)
sim %>% addr(x,n)

问题在于我没有将一列添加到管道表中。
1个回答

3
我们可以使用整洁的方式创建一个函数。
addr <- function(dat, col1, col2) {
  col1 <- enquo(col1)
  col2 <- enquo(col2)
  dat %>%
       mutate(sum = (!!col1) + (!!col2))
}

addr(sim, x, n)
# A tibble: 3 x 3
#      x     n   sum
#   <dbl> <dbl> <dbl>
#1     1     1     2
#2     1     2     3
#3     1     3     4

1
太好了!我从未见过 enquo!!。我在哪里可以找到更多的文档资料? - Alex
2
@Alex 新版本的dplyr https://blog.rstudio.com/2017/06/13/dplyr-0-7-0/ - BENY
2
还可以查看dplyr编程指南 - eipi10
这仍然似乎没有将数据添加到原始表中。例如,sim%>%addr(x,n)后跟sim仅产生2列表而不是3列。 - Alex
1
@Alex 你需要将它分配给原始数据,即 sim <- addr(sim, x, n)。还有一个 magrittr 操作符 %<>% 可以实现这一功能。 - akrun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接