我不确定这是否可能,甚至不知道如何为下面的R问题找到一个好的解决方案。
数据/背景/结构:我收集了基于项目的合作数据的大型数据集,这些数据将特定项目映射到参与公司(这可以理解为社交网络分析的两部分边缘列表)。由于分析原因,建议将整个数据集划分为不同位置和时间段的不同子集。因此,我创建了以下数据结构
sna.location.list
[[1]] (location1)
[[1]] (is a dataframe containing the bip. edge-list for time-period1)
[[2]] (is a dataframe containing the bip. edge-list for time-period2)
...
[[20]] (is a dataframe containing the bip. edge-list for time-period20)
[[2]] (location2)
... (same as 1)
...
[[32]] (location32)
...每个dataframe包含一个项目id和相应的公司id。
我现在的目标是将二分边列表转换为单模式网络,然后进行一些与sna相关的进一步计算(度、集中度、状态、社区检测等)。并拯救他们。
我知道如何用一个(!)来计算这些步骤但是它让我很难在所描述的列表结构中一次为所有网络自动执行此过程,并将各种输出(节点级和网络级变量)保存在类似的结构中。
我已经尝试了几种for循环的方法和应用方法,但它仍然让我彻夜难眠,如何做到这一点,现在我感到非常无助。如有任何帮助或建议,将不胜感激。如果您需要更多信息或示例来给我一个简短的演示或代码示例如何处理这种嵌套结构,并以一种有效的自动方式对所有上述子集进行与sna相关的计算/修改,请随时与我联系。
发布于 2018-10-28 11:32:40
假设您有一个要应用于每个数据框的函数foo。这些数据帧在列表中,所以lapply(that_list, foo)是我们想要的。但是你已经有了一堆列表,所以我们实际上想要在外部列表中lapply第一个lapply,因此是lapply(that_list, lapply, foo)。( foo将通过...传递给内部lapply。如果您希望更明确,您可以使用匿名函数:lapply(that_list, function(x) lapply(x, foo))。
您还没有给出可重现的示例,因此我将演示如何将nrow函数应用于一组内置数据帧
d = list(
list(mtcars, iris),
list(airquality, faithful)
)
result = lapply(d, lapply, nrow)
result
# [[1]]
# [[1]][[1]]
# [1] 32
#
# [[1]][[2]]
# [1] 150
#
#
# [[2]]
# [[2]][[1]]
# [1] 153
#
# [[2]][[2]]
# [1] 272如您所见,输出是一个具有相同结构的list。如果您需要名称,可以使用simplify = FALSE切换到sapply。
这包括将函数应用于嵌套列表以及将返回保存在类似的数据结构中。如果你在计算效率、并行化等方面需要帮助,我建议你单独问一个专注于此的问题,并提供一个可重现的例子。
https://stackoverflow.com/questions/53027858
复制相似问题