答案的格式实际上取决于您接下来要做什么,但这里有一个尝试:
set.seed(101)
npred <- nprey <- 10
tree_predator <- rcoal(npred)
tree_prey <- rcoal(nprey)
## Simulate traits on each tree
trait_predator <- fastBM(tree_predator)
trait_prey <- fastBM(tree_prey)
(我用于set.seed(101)
重现性,所以这些是我的特征结果......
> trait_predator
t1 t9 t4 t8 t5 t2
-2.30933392 -3.17387148 -0.01447305 -0.01293273 -0.25483749 1.87279355
t6 t10 t3 t7
0.70646610 0.79508740 0.05293099 0.00774235
> trait_prey
t10 t7 t9 t6 t8 t1
0.849256948 -0.790261142 0.305520218 -0.182596793 -0.033589511 -0.001545289
t4 t5 t3 t2
-0.312790794 0.475377720 -0.222128629 -0.095045954
...)
你生成的值是在一个无界的空间上,所以取它们的比率是没有意义的;我们假设它们是大小的对数exp(x-y)
,捕食者/猎物的大小比也是如此。任意地,我假设截止值是 1.5 ...
用于outer
比较所有捕食者和猎物的特征:这会创建一个二元 (0/1) 矩阵。
bmatrix <- outer(trait_predator,trait_prey,
function(x,y) as.numeric(exp(x-y)>1.5))
一种可视化结果的方法...
library(Matrix)
image(Matrix(bmatrix),xlab="Prey",ylab="Predator",sub="")
例如,您可以看到捕食者 #6(t2
在上面的输出中标记)非常大(log size=1.87),所以它吃掉了所有的猎物......
使用igraph
(我这里的一些方法有点老套)
library(igraph)
edges <- which(bmatrix==1,arr.ind=TRUE) ## extract vertex numbers
## distinguish prey (columns) from pred (rows)
edges[,2] <- npred+edges[,2]
gg <- graph.bipartite(rep(1:0,c(npred,nprey)),
c(t(edges)))
## c(t(edges)) collapses the two-column matrix to a vector in row order ...
## now plot ...
plot(gg,vertex.color=rep(c("cyan","pink"),c(npred,nprey)),
edge.arrow.mode=">")
这与上面的矩阵格式相匹配——捕食者 1 和 2(= 顶点 1 和 2)不吃任何人,猎物 2(= 顶点 12)被许多不同的捕食者吃掉......这种表示更漂亮但不一定更清晰(例如,捕食者 7 和 8 都吃猎物 2(顶点 12),但它们的箭头重合)。但是,如果您想应用图论方法,那么将它的igraph
形式化可能会很好(并且有很多用于绘制图形的布局选项)。