我有一个dplyr链如下
myResults <- rawData %>% filter(stuff) %>% mutate(stuff)
Run Code Online (Sandbox Code Playgroud)
现在我想的功能应用myFunc到myResults.有没有办法在链中做到这一点,或者我是否需要基本做到:
myResults <- myFunc(myResult)
Run Code Online (Sandbox Code Playgroud)
如果函数将数据帧作为第一个参数,则可以在最后添加它.
> myFunc <- function(x) sapply(x, max)
> mtcars %>% filter(mpg > 20) %>% myFunc()
mpg cyl disp hp drat wt qsec vs am gear
33.900 6.000 258.000 113.000 4.930 3.215 22.900 1.000 1.000 5.000
carb
4.000
Run Code Online (Sandbox Code Playgroud)
值得一提的magrittr::%>%是dplyr,任何参数都可以使用,因此您可以轻松地执行以下操作:
> inc <- function(x) x + 1
> 1 %>% inc(.) %>% sqrt(.) %>% log(.)
[1] 0.3465736
Run Code Online (Sandbox Code Playgroud)
并使用一些有用的magrittr别名:
library(magrittr)
set.seed(1)
inTrain <- sample(1:nrow(mtcars), 20)
mtcarsTest <- mtcars %>% extract(-inTrain, )
summaryPipe <- function(x) {print(summary(x)); x}
mtcars %>%
extract(inTrain, ) %>%
# Train lm
lm(mpg ~ ., .) %>%
# Print summary and forward lm results
summaryPipe %>%
# Predict on the test set
predict(newdata = mtcarsTest) %>%
# Print results and forward arguments
print %>%
# Compute RMSE
subtract(mtcarsTest %>% extract2('mpg')) %>%
raise_to_power(2) %>%
mean %>%
sqrt
Run Code Online (Sandbox Code Playgroud)
这可能是一个品味问题,但我个人觉得它很有用.
正如@BondedDust在评论中提到的,有三种方法可以将函数传递给%>%.使用点占位符,您可以在与第一个不同的位置使用LHS(请参阅lm调用).
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |