使用R中的一个数据评估许多函数

bar*_*nus 5 r function apply evaluate sapply

我知道我可以使用apply评估一个包含许多数据的函数,但是我可以使用一个数据评估许多函数吗?使用sapply我可以得到:

sapply(list(1:5,10:20,5:18), sum)
Run Code Online (Sandbox Code Playgroud)

但我想要像这样的东西:

sapply(1:5, list(sum, min,max))
Run Code Online (Sandbox Code Playgroud)

得到

15 1 5
Run Code Online (Sandbox Code Playgroud)

有什么聪明的主意吗?:)

Ric*_*ton 8

交换参数顺序,因为您循环遍历函数而不是数据.

sapply(list(sum, min, max), function(f) f(1:5))
Run Code Online (Sandbox Code Playgroud)

计算摘要统计信息的两种最优选的现代方法使用dplyrdata.table包. dplyr使用summarise或有各种解决方案(仅使用数据帧,而不是向量)summarise_each.

library(dplyr)
data <- data.frame(x = 1:5)
summarise(data, min = min(x), max = max(x), sum = sum(x))
summarise_each(data, funs(min, max, sum))
Run Code Online (Sandbox Code Playgroud)

dplyr-idiomatic风格是建立基于表达式链接.

data %>%
 summarise(min = min(x), max = max(x), sum = sum(x))
data %>%
  summarise_each(funs(min, max, sum))
Run Code Online (Sandbox Code Playgroud)

对于程序化使用(与交互式使用相反),建议使用下划线后缀函数和公式用于非标准评估.

data %>%
 summarise_(min = ~ min(x), max = ~ max(x), sum = ~ sum(x))
data %>%
  summarise_each_(funs_(c("min", "max", "sum"), "x")
Run Code Online (Sandbox Code Playgroud)

请参阅agstudy对该data.table解决方案的回答.