假设我有一个 n*p 数据框。
我计算了一个 p*p 维度的 n 矩阵列表(在下面的 R 脚本中名为 listMat),其中每个矩阵都是 n 个受访者中每个受访者的 p 个变量之间的距离矩阵。
我想计算一个名为normMat的n*n矩阵,其中每个元素对应于每个成对距离矩阵之间的差的范数。例如:normMat[1,2] 将是名为“diffMat”的矩阵的范数,其中 diffMat 是矩阵“listMat”列表的第一个距离矩阵和第二个距离矩阵之间的差。
我编写了以下脚本,该脚本运行良好,但我想知道是否有更有效的方法来编写它,以避免循环(例如使用lapply等..)并使脚本执行速度更快。
# exemple of n = 3 distances matrix between p = 5 variables
x <- abs(matrix(rnorm(1:25),5,5))
y <- abs(matrix(rnorm(1:25),5,5))
z <- abs(matrix(rnorm(1:25),5,5))
listMat <- list(x, y, z)
normMat <- matrix(NA,n,n)
for (numRow in 1:n){
for (numCol in 1:n){
diffMat <- listMat[[numRow]] - listMat[[numCol]]
normMat[numRow, numCol] <- norm(diffMat, type="F")
}
}
感谢您的帮助。
最佳答案
尝试:
normMat <- function(x, y) {
norm(x-y, type="F")
}
sapply(listMat, function(x) sapply(listMat, function(y) normMat(x,y)))
关于r - 循环更快计算的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20496124/