我有许多dataframes类似下面:r使用的功能列表提供给同一组输入
> dput(df)
structure(list(x1 = c(0.5, 0.65, 0.67, 0.6, 0.52, 0.47, 0.42,
0.41, 0.4, 0.38), x2 = c(88.2759008383549, 88.4629768937181,
88.6351264139755, 88.7928788760014, 88.9363150101317, 89.0654802835256,
89.1805310339952, 89.2816679977014, 89.3690643397432, 89.4429508602581
), x3 = c(0.44, 0.8, 8.6, 2.72, 0.06, 0, 0, 0, 0, 0.04)), .Names = c("x1",
"x2", "x3"), row.names = c(NA, -10L), class = "data.frame")
欲可变数量的函数应用到每个data.frame。
下面是3种功能的例子:
library(tiger)
f1 <- function(x1,x2) lagtime(x1,x2)
f2 <- function(x1,x2) mean(x1 - x2, na.rm = TRUE)
f3 <- function(x2,x3) sum(x2) /sum(x3)
myVector <- c(f1(df$x1,df$x2),
f2(df$x1,df$x2),
f3(df$x2,df$x3))
> myVector
[1] -6.00000 -88.44229 70.25615
但是,如果我有N个函数列表:
funs <- list(f1, f2, f3, ..., fn)
我应该lapply(或其他功能)使用,但如何?
由于功能上的dataframes自己的,而不是在dataframes列进行操作,他们操作上是可变的列,真的不会有一个干净的方式来做到这一点。如果您重写了在数据框上操作的函数,那么这将是微不足道的。 – stanekam 2014-10-02 21:20:21
我应该如何重写函数? – Claudia 2014-10-02 21:40:07
你看他们是如何服用载体的吗?使它成为数据框。在你的情况下,它将涉及到改变输入到'df'并在'x1','x2' ...'xn'之前添加'df $'。 – stanekam 2014-10-02 21:46:44