繁体   English   中英

循环/或应用 function 将 igraph 对象列表馈送到 R 中的 function

[英]Loop/ or apply function to feed list of igraph objects into function in R

我想创建一个 igraph 对象列表,然后将此列表输入到 model 信息扩散的两个函数中。 具体来说,我想生成一个随机生成的小世界和无标度网络列表,然后将这些列表输入两个函数,这些函数应用信息扩散的独立级联和线性阈值模型。

我可以使用 lapply 创建一个包含 1000 个唯一无标度 igraph 对象(大小为 100 个节点)的列表:

sample <- as.list(rep(100, 1000))
                 
list <- lapply(X = sample, FUN = sample_pa)

但是,对于需要参数的小世界 function 来说,这并不容易:

sample <- as.list(rep(100, 1000))

list <- lapply(X = sample, FUN = sample_smallworld(dim = 1, size = 100, nei = 2, p = 0.25))

我收到此错误:

Error in match.fun(FUN) : 
'sample_smallworld(dim = 1, size = 100, nei = 2, p = 0.25)' is not a function, character or symbol

然后,我想将此 igraph 对象列表输入到影响力的几个函数中。最大化 package

# independent cascade:
out <- influence_ic(g, seeds, 1000, 0.5))
# linear threshold:
out2 <- influence_lt(g, seeds, 1000, 0.5)

这些函数接受 igraph object(g,这将是我在上面创建的列表)、种子(初始活动节点列表)、步骤(运行次数)和激活概率或阈值(在我的示例中为 0.5)

如何修复我的 lapply 代码以接受 sample_smallworld() function,以及如何将这些 igraph 对象列表输入到这些影响函数中? 最终,我想要一个 dataframe 或 1000 个唯一 igraph 对象中每个对象的激活节点数列表。

lapply()通过将X的元素传递到FUN参数下列出的 function 的第一个 position 来工作。 然后可以使用...按名称传递任何其他参数。

您似乎希望将sample的元素作为值传递给sample_smallworld()size参数。 因此,定义自己的 function 以重新排列 arguments 的顺序以更轻松地使用lapply()可能是最简单的,如下所示:

hundos <- as.list(rep(100, 1000))

my_sample_smallworld <- function(size, ...) {
  igraph::sample_smallworld(size = size, ...)
}

gs <- lapply(X = hundos, 
             FUN = my_sample_smallworld,
             dim = 1, 
             nei = 2, 
             p = 0.25)

代表 package (v1.0.0) 于 2021 年 3 月 17 日创建

lapply()与这个其他包的函数的应用将与sample_pa()相同,因为您希望传入的对象将作为第一个参数传递。 因此,您不需要编写自定义 function:

out <- lapply(X = gs, 
              FUN = influence_ic, 
              seed = 1, 
              steps = 1000, 
              prob = 0.5)

out2 <- lapply(X = gs, 
               FUN = influence_lt, 
               seed = 1, 
               steps = 1000, 
               prob = 0.5)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM