如何用dplyr链式语法替换方阵的非对角线元素为固定值
用dplyr链式语法实现方阵非对角线元素替换
下面提供两种符合你需求的实现方式:
方法一:使用dplyr::replace函数
replace函数可直接通过逻辑索引替换元素,完美适配链式语法:
library(dplyr) matrix(c(1,2,3,4,3,9,5,5,8), ncol=3) %>% replace(upper.tri(.) | lower.tri(.), 999)
这里的.代表管道传递过来的矩阵对象,upper.tri(.) | lower.tri(.)定位所有非对角线元素,最后指定替换值999即可。
方法二:用代码块包裹赋值操作
如果更习惯基础R的赋值语法,可以在链式中用{}包裹操作,注意最后要显式返回修改后的矩阵:
library(dplyr) matrix(c(1,2,3,4,3,9,5,5,8), ncol=3) %>% { .[upper.tri(.) | lower.tri(.)] <- 999 . }
需要注意的是,dplyr核心设计偏向数据框处理,但通过上述方式,完全可以用链式语法完成矩阵的修改需求。
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

