如何在R中对行数不固定的矩阵应用coalesce函数
解决方法
你可以用R基础包的do.call()函数实现动态传参,它可以自动把列表中的所有元素拆解为目标函数的位置参数,适配任意行数的矩阵场景。
完整实现代码
首先导入依赖包并构造示例数据:
library(dplyr) # 示例矩阵 y <- c(1, NA, NA, NA, 5) z <- c(NA, NA, 3, 4, 6) k <- c(NA, 1, NA, NA, 8) d <- rbind(y,z,k)
方法1:复用已有的split处理结果
你用split得到的行向量列表可以直接传入do.call使用:
# 原有逻辑生成的行向量列表 vec_list <- split(t(d), rep(1:nrow(d), each = ncol(d))) # 动态调用coalesce result <- do.call(coalesce, vec_list)
输出结果和固定参数调用coalesce(y,z,k)完全一致:1 1 3 4 5
方法2:更简便的行向量列表生成方式
不用手写split逻辑,转置后转数据框再转列表即可,代码更简洁:
vec_list <- as.list(data.frame(t(d))) result <- do.call(coalesce, vec_list)
两种方法都适配任意行数的输入矩阵,不需要手动修改参数个数。
内容的提问来源于stack exchange,提问作者Dianafreedom
相关产品推荐
相关产品推荐

