[英]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.