2014-06-11 21 views
0

我正在尝试使用igraph为共同作者网络分析项目创建边界列表。我的数据以特定纸张的每位作者按行进行收听的方式进行存储,这意味着每张纸张都是一种观察结果,列中包含该纸张的作者。从R中的协作网络创建边界列表

是否可以使用combn函数在每篇论文中创建每个作者组合的边界列表?

+3

为什么你会认为这是不可能的?你有什么尝试?请编辑您的问题以包含示例输入和所需输出,或者描述您使用自己的代码所遇到的问题(为什么结果不是您想要的)。 – MrFlick

回答

0

我想你将不得不做它一个接一个,但你可以把它们放在一起使用do.call(“C”,...)

library(utils) 


## original data as a list 
data.in = list(c(1,2,3),c(4,5),c(3),c(1,4,6)) 

## function that makes all pairs 
f.pair.up <- function(x) { 
n = length(x) 
if (n<2) { 
    res <- NULL 
} else { 
    q <- combn(n,2) 
    x2 <- x[q] 
    #dim(x2) <- dim(q) 
    res <- x2 
} 
return(res) 
} 

## for each paper create all author pairs (as a flat vector) 
data.pairs.bypaper = lapply(data.in,f.pair.up) 

## remove papers that contribute no edges 
data.pairs.noedge = sapply(data.pairs.bypaper,is.null) 
data.pairs2.bypaper <- data.pairs.bypaper[!data.pairs.noedge] 

## combine all 'subgraphs' 
data.pairs.all <- do.call('c',data.pairs2.bypaper) 

## how many authors are there? 
n.authors <- length(unique(data.pairs.all)) 

## make a graph 
my.graph = graph(data.pairs.all,directed=FALSE,n=n.authors) 

## plot it 
tkplot(my.graph)