将此 for 循环转换为应用函数 R
Convert this for loop to an apply function R
我有一个数据向量,如下所示:
data <- c(1, 3, 4, 7)
我想对向量中的每一对元素应用一个函数,这样它将 return 一个上三角矩阵,如下所示:
mat <- matrix(data = NA, nrow = length(data), ncol = length(data))
for (i in 1:(length(data) - 1)) {
for (j in (i+1):length(data)) {
mat[i, j] <- "-"(data[j], data[i])
}
}
但我想使用应用类型函数而不是 for 循环。
我不确定该怎么做。有什么建议吗?
谢谢!
我们可以使用combn
mat[lower.tri(mat, diag=FALSE)] <- combn(data, 2,
FUN= function(x) x[2]-x[1])
t(mat)
# [,1] [,2] [,3] [,4]
#[1,] NA 2 3 6
#[2,] NA NA 1 4
#[3,] NA NA NA 3
#[4,] NA NA NA NA
数据
mat <- matrix(data = NA, nrow = length(data), ncol = length(data))
使用outer
:
t(outer(data,data,"-"))*
NA^lower.tri(matrix(0,length(data),length(data)),diag=TRUE)
# [,1] [,2] [,3] [,4]
#[1,] NA 2 3 6
#[2,] NA NA 1 4
#[3,] NA NA NA 3
#[4,] NA NA NA NA
我有一个数据向量,如下所示:
data <- c(1, 3, 4, 7)
我想对向量中的每一对元素应用一个函数,这样它将 return 一个上三角矩阵,如下所示:
mat <- matrix(data = NA, nrow = length(data), ncol = length(data))
for (i in 1:(length(data) - 1)) {
for (j in (i+1):length(data)) {
mat[i, j] <- "-"(data[j], data[i])
}
}
但我想使用应用类型函数而不是 for 循环。
我不确定该怎么做。有什么建议吗?
谢谢!
我们可以使用combn
mat[lower.tri(mat, diag=FALSE)] <- combn(data, 2,
FUN= function(x) x[2]-x[1])
t(mat)
# [,1] [,2] [,3] [,4]
#[1,] NA 2 3 6
#[2,] NA NA 1 4
#[3,] NA NA NA 3
#[4,] NA NA NA NA
数据
mat <- matrix(data = NA, nrow = length(data), ncol = length(data))
使用outer
:
t(outer(data,data,"-"))*
NA^lower.tri(matrix(0,length(data),length(data)),diag=TRUE)
# [,1] [,2] [,3] [,4]
#[1,] NA 2 3 6
#[2,] NA NA 1 4
#[3,] NA NA NA 3
#[4,] NA NA NA NA