所以我在R中有一个相当复杂的(至少对我来说)问题。
我想计算两对分布之间的距离,将近 10k 对。
我有一个来自包philentropy
的distance
函数,它x
y
两个向量并计算它们之间的距离,例如:
d <- distance(x, y, method="desired_method")
另一种选择是创建一个矩阵,每行代表一个分布,以便函数将计算矩阵中所有分布之间的所有成对距离:
d <- distance(x, method="desired_method")
我有两个相关矩阵a
和b
,每个矩阵近 10k 行,对应于 10k 个相关分布。两个矩阵具有相同的行数,我的目标是迭代地将矩阵a
的第一行与矩阵b
的第一行、第二行a
行与第二行b
行等进行对比。
我可以选择每个所需的行并执行第一个distance
用法,或者我可以将两个矩阵与rbind
合并,并以第二个distance
用法执行所有成对距离。
问题是,对于第一种方法,我不知道如何生成一个for
循环来迭代获取每个矩阵的第 n 行,并执行distance
计算,同时将结果存储在向量中。
此外,如果我执行第二个选项,我不想获取所有成对距离,而只是对应于以下距离的距离:
d[i,i+nrow(a)]
并迭代这样做以生成nrow(a)
值的相应向量。
有什么帮助吗?
如果你有两个矩阵,mat_x 和 mat_y,每个矩阵的行数相同,那么 for 循环将是:
answer <- vector(mode = 'numeric', length = 10000L)
for (i in 1:10000){
answer[[i]] <- distance(mat_x[i,], mat_y[i,], method="desired_method")
}