本文介绍了有没有专门针对Tibble和管道衬里的副作用的功能?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想知道是否可以使用dplyr::select、dplyr::matate或dplyr::transmute这样的函数来调用副作用函数?我会走路,但不是来自同一个家庭。tibble::as.tibble(mtcars) %>%
dplyr::transmute(colA = cyl * hp, colB = mpg * wt) %>%
dplyr::mutate(., (function(.data, colA, colB){
print(colA)
print(colB)
# invisible(.data)
return(.data)
})(.data = ., colA, colB))
例如,我要将列名用作函数的参数。
推荐答案
base::with
使您可以访问所需的列作为变量,magrittr::%T>%
允许您运行一行副作用,同时仍将整个数据框沿管道向下传递。简单示例:
library(dplyr)
library(magrittr)
mtcars %>% slice(1:3) %T>%
with({print(mpg)
print(cyl)}) %>%
summarize_all(mean)
# [1] 21.0 21.0 22.8
# [1] 6 6 4
# mpg cyl disp hp drat wt qsec vs am gear carb
# 1 21.6 5.333333 142.6667 104.3333 3.883333 2.605 17.36333 0.3333333 1 4 3
示例的简化版本:
mtcars %>%
transmute(colA = cyl * hp, colB = mpg * wt) %T>%
with({
print(colA)
print(colB)
}) %>%
head
# [1] 660 660 372 660 1400 630 1960 248 380 738 738 1440 1440 1440 1640 1720 1840 264 208
# [20] 260 388 1200 1200 1960 1400 264 364 452 2112 1050 2680 436
# [1] 55.0200 60.3750 52.8960 68.8010 64.3280 62.6260 51.0510 77.8360 71.8200 66.0480 61.2320
# [12] 66.7480 64.5290 57.4560 54.6000 56.4096 78.5715 71.2800 49.0960 62.2065 52.9975 54.5600
# [23] 52.2120 51.0720 73.8240 52.8255 55.6400 45.9952 50.0860 54.5690 53.5500 59.4920
# colA colB
# 1 660 55.020
# 2 660 60.375
# 3 372 52.896
# 4 660 68.801
# 5 1400 64.328
# 6 630 62.626
请注意,with
只有一个expr
参数,因此若要在一个with
中执行多项操作,您需要使用{}
将语句括起来。
这篇关于有没有专门针对Tibble和管道衬里的副作用的功能?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!