如果函数的第一个参数是数据框,你可以简单地将其添加到末尾。
> myFunc <- function(x) sapply(x, max)
> mtcars
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
值得一提的是,
dplyr
使用的
magrittr::%>%
可以与任何参数一起使用,因此您可以轻松地执行以下操作:
> inc <- function(x) x + 1
> 1
[1] 0.3465736
同时还可以使用一些实用的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, ) %>%
lm(mpg ~ ., .) %>%
summaryPipe %>%
predict(newdata = mtcarsTest) %>%
print %>%
subtract(mtcarsTest %>% extract2('mpg')) %>%
raise_to_power(2) %>%
mean %>%
sqrt
我个人认为这可能是个人口味问题,但我觉得它相当有用。
正如@BondedDust在评论中提到的那样,有三种可能的方法将函数传递给
%>%
。使用点占位符,您可以在不同于第一个位置的地方使用LHS(请参见
lm
调用)。
lapply(x, max)
可能比在示例函数的主体中使用apply
调用更有效。如果您使用%>% myFunc(。)
或仅使用%>% myFunc
,则可能会看起来更好。在我看来,看到空参数列表意味着没有处理任何内容,但这可能只是审美上的小问题。 - IRTFMsapply
。R的早期用户总是首先使用apply
,他们需要被告知它常常会产生不可预知的后果。 - IRTFM