首页 > 解决方案 > 将多参数函数应用于R中列表中的所有数据框

问题描述

我有一个数据框列表,每个数据框有 3 列。

list_of_df <- list(df1 = data.frame(f = c(6,4,2,9,7), g = c(7,5,3,1,8), h = c(4,2,1,3,6)),
                   df2 = data.frame(f = c(5,3,1,8), g = c(6,4,2,9), h = c(4,1,5,7)))
list_of_df
$df1
  f g h
1 6 7 4
2 4 5 2
3 2 3 1
4 9 1 3
5 7 8 6

$df2
  f g h
1 5 6 4
2 3 4 1
3 1 2 5
4 8 9 7

等等

我已经定义了一个函数来计算曲线下的面积(auc):

auc <- function(x,y) sum(diff(x) * (head(y,-1)+tail(y,-1)))/2

对于每个数据框,列f是输入x,列g是输入y

现在我想使用一个版本apply()(不关心哪一个)将该函数auc应用于列表中的每个数据框。但我需要能够指定这些列f并且g应该用作输入。

到目前为止,我所有指定列的尝试都导致意外地从列表中指定了一个数据框。

有什么想法我可以做到这一点吗?谢谢。

标签: rfunctionapplylapplymapply

解决方案


您的 AUC 函数对我来说似乎不正确,但该sapply函数将列表作为输入。

auc <- function(x,y) sum(diff(x) * (head(y,-1)+tail(y,-1)))/2

list_of_df <- list(df1 = data.frame(f = c(6,4,2,9,7), g = c(7,5,3,1,8), h = c(4,2,1,3,6)),
                   df2 = data.frame(f = c(5,3,1,8), g = c(6,4,2,9), h = c(4,1,5,7)))
list_of_df
$df1
  f g h
1 6 7 4
2 4 5 2
3 2 3 1
4 9 1 3
5 7 8 6

$df2
  f g h
1 5 6 4
2 3 4 1
3 1 2 5
4 8 9 7

sapply(list_of_df, function(x) auc(x$f, x$g))
  df1   df2 
-15.0  22.5 

推荐阅读