如何将函数应用于 R 中的子列表

How to apply a function to sublists in R

我正在尝试将 sample_n() 函数应用于 R 中的子列表。不知怎么的,经过几次试验后我无法正确使用它。

我的数据结构是一个包含 27 个列表的列表(我称它们为 27 个元素)。每个元素都是一个数据框列表。请查看这两张图片以更清楚地了解数据结构。

27 个列表的列表。

每个子列表都是一个数据框列表。

我想将 sample_n() 应用于每个数据框。数据框的示例如下所示。

> test2[[1]][[1]]

数据帧示例

对于这个数据框,outdegree_within_or1 变量的第一个元素是 1。所以我想在这个数据框中采样 1 行。如果对于另一个数据框,相应的值为 5,那么我想对该数据框的 5 行进行采样。请注意,actor_id 值对于数据框中的所有条目都是相同的。输出应具有与输入数据相同的结构,但每个数据帧中的行数较少。输出的每个数据帧中的 actor_id 值应该相同。我使用以下 R 代码来完成它,但它没有给我正确的结果。

ties_within <-map(test2, ~map_df(.x, ~sample_n(.x, outdegree_within_or1[1]))) 

以上代码返回了一个包含 27 个列表的列表(我称它们为 27 个元素)。此时,每个元素都是单个数据框,而不是数据框列表(我应该得到的)。上面的代码似乎是对原始输入数据的每个元素内的所有数据帧的行进行采样,而不是对每个数据帧内的行进行采样(我打算这样做)。

什么是解决方案?

使用 map 而不是 map_df

ties_within <-map(test2, ~map(., ~sample_n(., size = id[1]))) 

map returns 与输入大小相同的列表,而 map_df 将返回的对象转换为数据帧。