R语言:如何向下三角Jaccard相似矩阵元素应用自定义函数?
下三角矩阵元素的自定义筛选实现
你需要保留下三角矩阵中大于0.7的值,其余元素(包括原有的NA)保持NA,同时保留矩阵结构,这里提供两种实现方式:
1. 测试矩阵代码
首先还原你的测试矩阵生成代码:
N <- 3 # 观测数 N_vec <- 3 # 向量数 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
2. 解决方案
方法一:向量化操作(高效推荐)
利用R的向量化特性直接修改矩阵,这种方式比逐元素遍历更快,尤其适合大矩阵:
mat_x2 <- mat_x1 # 将所有<=0.7的元素设为NA mat_x2[mat_x1 <= 0.7] <- NA mat_x2 # 输出结果 # [,1] [,2] [,3] # [1,] NA NA NA # [2,] 0.7883051 NA NA # [3,] NA NA NA
方法二:应用自定义函数
如果你一定要使用自己定义的函数,可以用apply()逐元素处理:
# 定义自定义函数 y <- function(x) if (x > 0.7) x else NA # 应用到矩阵的每个元素(1,2表示按行和列遍历所有元素) mat_x2 <- apply(mat_x1, c(1, 2), y) mat_x2 # 输出结果与方法一一致
内容的提问来源于stack exchange,提问作者RobertF
相关产品推荐
相关产品推荐

