从两个矩阵中迭代选择行,并在 R 中执行函数



所以我在R中有一个相当复杂的(至少对我来说)问题。

我想计算两对分布之间的距离,将近 10k 对。

我有一个来自包philentropydistance函数,它xy两个向量并计算它们之间的距离,例如:

d <- distance(x, y, method="desired_method")

另一种选择是创建一个矩阵,每行代表一个分布,以便函数将计算矩阵中所有分布之间的所有成对距离:

d <- distance(x, method="desired_method")

我有两个相关矩阵ab,每个矩阵近 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")
}

最新更新