如何将函数应用于R中矩阵的每个元素?

问题描述 投票:0回答:1

我正在努力将函数应用于矩阵(下三角杰卡德相似矩阵)的每个元素。

该函数应返回值> .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
r function matrix rstudio mapply
1个回答
0
投票

在这种情况下,你可以这样做:

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)
© www.soinside.com 2019 - 2024. All rights reserved.