我正在努力将函数应用于矩阵(下三角杰卡德相似矩阵)的每个元素。
该函数应返回值> .7的矩阵值,并将其他元素重新分配为NA,从而更容易识别高度相似的二元变量。理想情况下,矩阵结构会被保留。
我创建了一个简单的 3x3 样本矩阵,其中填充了用于测试的随机值:
N <- 3 # Observations
N_vec <- 3 # Number of vectors
set.seed(123)
x1 <- runif(N * N_vec)
mat_x1 <- matrix(x1, ncol = N_vec)
mat_x1[upper.tri(mat_x1)] <- NA
diag(mat_x1) <- NA
mat_x1
[,1] [,2] [,3]
[1,] NA NA NA
[2,] 0.7883051 NA NA
[3,] 0.4089769 0.0455565 NA
如何将以下函数应用于返回值 > 0.7 的每个矩阵元素?
y = (function(x) if (x > .7) { return(x) } else { return(NA) })
我希望在应用该功能后看到以下内容:
mat_x2
[,1] [,2] [,3]
[1,] NA NA NA
[2,] 0.7883051 NA NA
[3,] NA NA NA
在这种情况下,你可以这样做:
mat_x1[mat_x1 <= .7] <- NA
# [,1] [,2] [,3]
#[1,] NA NA NA
#[2,] 0.7883051 NA NA
#[3,] NA NA NA
如果这只是一个示例,您想要应用函数
y
的某种变体,首先确保您的函数是矢量化的,在这种情况下,就像将 if
更改为 ifelse
一样简单,然后将函数应用于矩阵。
y = function(x) ifelse(x > .7, x, NA)
y(mat_x1)