如何计算R语言矩阵各列的min()与max()并保存结果?
R语言矩阵列数值范围计算的简便实现方法
现有如下R语言矩阵:
data <- structure(c(269.643848985434, 284.856715574861, 278.687093704939, 242.00628682971, 258.754844814539, 257.241126745939, 250.868861973286, 267.881099879742, 266.277047023177, 264.643696397543, 283.306375294924, 278.137760534883, 251.230201125145, 264.389782398939, 260.087893307209, 263.933225497603, 284.947050362825, 279.185155779123, 262.722251042724, 284.903103709221, 279.329203143716, 256.589251384139, 274.861293360591, 270.730307921767, 233.265785723925, 249.657887518406, 247.94396802783, 264.665669724345, 284.124271348119, 278.701742589474, 0, 0, 0 ), dim = c(3L, 11L), dimnames = list(NULL, c("", "", "", "", "", "", "", "", "", "", "gt")))需要计算该矩阵每列的数值范围(即最小值
min()和最大值max()),并将结果存入列表,求简便实现方法。
方案1:Base R原生方法(无需额外安装包)
这是最轻量化的实现方式,利用原生apply()函数按列处理:
# 计算每列的min和max,返回矩阵格式 col_ranges_matrix <- apply(data, 2, function(col) c(min = min(col), max = max(col))) # 将矩阵转换为列表,每个元素对应一列的范围 col_ranges_list <- as.list(data.frame(col_ranges_matrix))
apply(data, 2, ...)中的2表示按列操作,若需按行则传入1- 匿名函数返回当前列的最小值和最大值,并给结果命名,便于后续查看
- 最终转换后的列表元素名与原矩阵列名完全对应(包括最后一列
gt)
方案2:Tidyverse工具包实现(适配tidy工作流)
如果日常使用tidyverse生态,可借助purrr::map()快速实现:
# 安装并加载tidyverse install.packages("tidyverse") library(purrr) # 矩阵转数据框后,遍历每列计算范围 col_ranges_list <- map(as.data.frame(data), ~c(min = min(.x), max = max(.x)))
结果说明
执行后,col_ranges_list的每个元素都是包含min和max的命名向量,例如最后一列gt的结果为c(min=0, max=0)。
内容的提问来源于stack exchange,提问作者user21573410
相关产品推荐
相关产品推荐

