R 使用Lappy创建一个新的数据帧列表,用于总结网络分析

R 使用Lappy创建一个新的数据帧列表,用于总结网络分析,r,list,lapply,network-analysis,R,List,Lapply,Network Analysis,我有一个数据列表,其中包含数据帧形式的网络。我想做的是执行一个函数,该函数计算多个网络属性并将它们存储在新的数据帧列表中 例如: #Create example matrices for network analysis A = matrix( c( NA, 1, 0, 3, 1, NA, 4, 3, 1, 0, NA, 3, 1, 1, 0, NA ), nrow = 4, ncol = 4) B = matrix( c( NA, 2, 3, 0, 4, NA, 3, 1, 0, 3, NA,

我有一个数据列表,其中包含数据帧形式的网络。我想做的是执行一个函数,该函数计算多个网络属性并将它们存储在新的数据帧列表中

例如:

#Create example matrices for network analysis
A = matrix( c( NA, 1, 0, 3, 1, NA, 4, 3, 1, 0, NA, 3, 1, 1, 0, NA ), nrow = 4, ncol = 4)
B = matrix( c( NA, 2, 3, 0, 4, NA, 3, 1, 0, 3, NA, 2, 0, 2, 1, NA ), nrow = 4, ncol = 4)
C = matrix( c( NA, 0, 0, 1, 2, NA, 0, 5, 1, 2, NA, 0, 3, 3, 0, NA ), nrow = 4, ncol = 4)

#transform into dataframes as this is the form they are in within my list
A <- as.data.frame(A)
B <- as.data.frame(B)
C <- as.data.frame(C)

colnames(A) <- letters[1:4]
colnames(B) <- letters[1:4]
colnames(C) <- letters[1:4]

#create list of matrices
my_list <- list(A, B, C)

#install igraph for network analysis
install.packages("igraph")
library(igraph)
network.A <- network.summary(A)
我想要的是一个包含像这样的数据帧的列表。但是,当我尝试在这个列表中执行这个函数时,它似乎只创建了一个空白列表,使用下面的代码没有错误消息

network.properties <- lapply(names(my_list), function(x) network.summary(my_list[[x]]))

network.properties使用apply的想法很好!然而,你的第一个论点是错误的
my_list
是一个未命名的列表,这意味着
names(my_list)
将返回
NULL
。有几种方法可以解决此问题:

  • 说出你的名单,例如,
    my_list=c(a=a,b=b,c=c)
  • 实际上,如果将
    列表应用于
    lappy()
    ,那么它将把您提供的函数应用于列表中的每个元素。这还意味着您不需要将
    my_list[[x]]
    添加到提供的函数中,因为提供的函数已经应用于列表中的每个元素,即存在的
    my_list[[x]
    。因此,您只需在
    network.summary()
    中编写
    x

                        a    b         c   d
    centrality  7.0000000 7.00 5.0000000 7.0
    closeness   0.3333333 0.25 0.1666667 0.2
    betweenness 1.0000000 2.00 0.0000000 0.0
    
    network.properties <- lapply(names(my_list), function(x) network.summary(my_list[[x]]))
    
    my_list <- list(a = A, b = B, c = C)
    (network.properties <- lapply(names(my_list), function(x) network.summary(my_list[[x]])))
    #> [[1]]
    #>                     a    b         c   d
    #> centrality  7.0000000 7.00 5.0000000 7.0
    #> closeness   0.3333333 0.25 0.1666667 0.2
    #> betweenness 1.0000000 2.00 0.0000000 0.0
    #> 
    #> [[2]]
    #>                     a         b         c         d
    #> centrality  5.0000000 8.0000000 7.0000000 6.0000000
    #> closeness   0.1111111 0.1428571 0.1428571 0.1666667
    #> betweenness 0.0000000 3.0000000 0.0000000 1.0000000
    #> 
    #> [[3]]
    #>                a         b   c         d
    #> centrality  6.00 6.0000000 4.0 6.0000000
    #> closeness   0.25 0.1428571 0.2 0.1666667
    #> betweenness 2.00 0.0000000 0.0 1.0000000
    
    (network.properties <- lapply(my_list, function(x) network.summary(x)))
    #> $a
    #>                     a    b         c   d
    #> centrality  7.0000000 7.00 5.0000000 7.0
    #> closeness   0.3333333 0.25 0.1666667 0.2
    #> betweenness 1.0000000 2.00 0.0000000 0.0
    #> 
    #> $b
    #>                     a         b         c         d
    #> centrality  5.0000000 8.0000000 7.0000000 6.0000000
    #> closeness   0.1111111 0.1428571 0.1428571 0.1666667
    #> betweenness 0.0000000 3.0000000 0.0000000 1.0000000
    #> 
    #> $c
    #>                a         b   c         d
    #> centrality  6.00 6.0000000 4.0 6.0000000
    #> closeness   0.25 0.1428571 0.2 0.1666667
    #> betweenness 2.00 0.0000000 0.0 1.0000000