在R中如何使用另一向量的数值指定矩阵名称并索引其元素?
R语言动态调用指定名称矩阵的实现方法
两种常用实现方案
方案1:使用get()函数直接动态获取变量
通过paste0()拼接出目标矩阵的变量名,再用get()函数获取对应的矩阵对象,之后直接加索引取值即可。
示例代码:
# 初始化环境 a1 <- matrix(NA, 10, 2) a2 <- matrix(NA, 10, 2) a3 <- matrix(NA, 10, 2) b <- c(1,2,3,2,3,3) # 给测试位置赋值验证 a1[1, 2] <- "a1_1_2" a2[3, 1] <- "a2_3_1" # 获取b[1]对应a1的[1,2]位置值 res1 <- get(paste0("a", b[1]))[1, 2] print(res1) # 输出:"a1_1_2" # 获取b[4]对应a2的[3,1]位置值 res2 <- get(paste0("a", b[4]))[3, 1] print(res2) # 输出:"a2_3_1"
方案2:矩阵存入列表后按索引调用(更推荐)
把所有同系列矩阵存入一个列表中,直接用向量b的数值作为列表的索引取值,不需要拼接字符串,代码更易维护,也不会污染全局变量环境。
示例代码:
# 把三个矩阵按顺序存入列表 mat_list <- list(a1, a2, a3) # 获取b[1]对应a1的[1,2]位置值 res1 <- mat_list[[b[1]]][1, 2] print(res1) # 输出:"a1_1_2" # 获取b[4]对应a2的[3,1]位置值 res2 <- mat_list[[b[4]]][3, 1] print(res2) # 输出:"a2_3_1"
方案对比
get()方案适合临时快速调用的场景,不需要调整现有变量结构- 列表方案适合矩阵数量较多、需要批量处理的场景,代码可读性和可维护性更高
内容的提问来源于stack exchange,提问作者Rlearner
相关产品推荐
相关产品推荐

