如何将列表中的每个元素与其他元素进行比较并将结果输出为 R 中的成对比较矩阵?
我正在尝试自动化计算最近植被研究中调查的每一对可能的地点的杰卡德相似度指数的过程。
下面是我的数据格式的虚拟列表,其中 x、y 和 z 是离散的调查站点,以及函数 jaccard()
。
x <- c("sp1","sp2","sp3")
y <- c("sp2","sp3","sp4")
z <- c("sp3","sp4","sp5")
dummy_list <- list(x,y,z)
jaccard <- function(a, b) {
intersection = length(intersect(a, b))
union = length(a) + length(b) - intersection
return (intersection/union) }
我想将每个成对比较(xy、xz、yz)传递给 jaccard() 并输出计算出的 Jaccard 指数矩阵。我怎样才能实现这个目标?
I am trying to automate the process of calculating Jaccard's index of similarity for every possible pair of sites surveyed in a recent vegetation study.
Below is a dummy list in the format of my data, where x, y, and z are discrete survey sites, and function jaccard()
.
x <- c("sp1","sp2","sp3")
y <- c("sp2","sp3","sp4")
z <- c("sp3","sp4","sp5")
dummy_list <- list(x,y,z)
jaccard <- function(a, b) {
intersection = length(intersect(a, b))
union = length(a) + length(b) - intersection
return (intersection/union) }
I want to pass each pairwise comparison (x-y, x-z, y-z) to jaccard()
and output a matrix of calculated Jaccard indicies. How can I achieve this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我们可以首先
矢量化
您的jaccard
函数,然后使用outer
:创建于2022年3月2日,由reprex 包 (v2.0.1)
We could first
Vectorize
yourjaccard
function and then useouter
:Created on 2022-03-02 by the reprex package (v2.0.1)
我们可以使用以下基本 R 方法(不使用 jaccard 函数,但遵循相同的定义)
We can use the following base R approach (without using the
jaccard
function but following the same definition)