【问题标题】:Select rows from two matrices iteratively and perform function in R迭代地从两个矩阵中选择行并在 R 中执行函数
【发布时间】:2024-01-05 00:34:01
【问题描述】:

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

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

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

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”的矩阵的第 n 行,请使用以下语法:mat[n,]
  • 我在 philentropy::distance 中没有看到 y 参数。

标签: r loops matrix distance


【解决方案1】:

如果您有两个矩阵 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")
}

【讨论】:

    最近更新 更多