我有許多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