R语言如何使用字符向量中存储的名称批量abind多个数组
你遇到的报错核心原因是直接传入存储对象名的字符向量时,abind读取到的是字符串本身而非对应的数组对象:字符串向量的维度远低于5,因此触发along参数超出有效范围的报错。
你可以结合get()函数和do.call()实现自动化批量调用,不需要调整现有工作流,示例代码如下:
# 加载abind包 library(abind) # 你的对象名字符向量 test.list <- paste0("test.array",1:3) # 1. 批量从当前环境取出所有数组对象,存为临时列表 arr_list <- lapply(test.list, get) # 2. 将列表内的数组拆分为独立参数传入abind执行拼接 test.array.bind <- do.call(abind, c(arr_list, along = 5))
代码逻辑说明
lapply(test.list, get)会遍历每个对象名字符串,从当前工作环境中取出对应名称的数组对象,返回由所有待拼接数组组成的临时列表do.call会将传入的列表拆分为独立的位置参数传递给abind,等效于你手动逐个写出所有数组名调用abind的效果,完全匹配手动调用的运行逻辑
可选优化
如果需要避免因部分数组不存在导致的报错,可以先做有效性校验:
# 仅保留当前环境中真实存在的对象名 valid_arr_names <- test.list[sapply(test.list, exists)] arr_list <- lapply(valid_arr_names, get) test.array.bind <- do.call(abind, c(arr_list, along = 5))
如果你的数组存储在非全局环境(例如函数内部的局部环境),只需要给get指定对应的环境参数即可:
# 示例:从当前运行的局部环境取对象 current_env <- environment() arr_list <- lapply(test.list, get, envir = current_env)
内容的提问来源于stack exchange,提问作者The_Tams
相关产品推荐
相关产品推荐

