将函数应用于 R 中的数据帧列表

Apply a function to a List of dataframes in R

我需要有关如何以迭代方式管理列表的帮助。

我有以下列表 list,它由几个具有相同列但行数不同的数据框组成。示例:

[[1]]
  id InpatientDays ERVisits OfficeVisits Narcotics
1  a             0        0           18         1
2  b             1        1            6         1
3  c             0        0            5         3
4  d             0        1           19         0
5  e             8        2           19         3
6  f             2        0            9         2

[[2]]
    id InpatientDays ERVisits OfficeVisits Narcotics
7   a            16        1            8         1
8   b             2        0            8         0
9   c             2        1            4         3
10  d             4        2            0         2
11  e             6        5           20         2
12  a             0        0            7         4

我想应用一个函数来获取列表中每个 "data frame" 的 ID 的所有可能组合。

我打算尝试这样的事情 lapply(list1, function(x) combn(unique(list1[x]$id))) 这当然行不通.. 期待得到这样的事情:

[[1]]  
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
[1,] "a"  "a"  "a"  "a"  "a"  "b"  "b"  "b"  "b"  "c"   "c"   "c"   "d"   "d"   "e"  
[2,] "b"  "c"  "d"  "e"  "f"  "c"  "d"  "e"  "f"  "d"   "e"   "f"   "e"   "f"   "f"  

[[2]] 
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] "a"  "a"  "a"  "a"  "b"  "b"  "b"  "c"  "c"  "d"  
[2,] "b"  "c"  "d"  "e"  "c"  "d"  "e"  "d"  "e"  "e" 

这可能吗?我确定这适用于单个数据帧 df

  combn(unique(df$id),2) 

我们需要使用unique(x$id)

 lapply(list1, function(x) combn(unique(x$id),2))

OP 的代码正在使用 lapply 循环 'list1'。匿名函数调用(function(x)) returns list 中的每个'data.frame' 即'x' 是'data.frame'。所以,我们只需要调用 x$id(或 x[['id']])来提取 'id' 列。本质上,'x' 不是索引。但是,如果我们需要根据索引进行子集化,我们必须遍历 'list1' 的序列(或者如果 list 元素被命名,则循环遍历它的 names

lapply(seq_along(list1), function(i) combn(unique(list1[[i]]$id), 2))