【发布时间】:2023-04-07 09:54:01
【问题描述】:
我想堆叠具有连续名称的向量。
例如,我有
a1<-1:3
a2<-4:6
a3<-7:9
我知道我能帮你
z<-as.vector(rbind(a1,a2,a3))
如果我有 100 个 as、a1、a2、a3、...、a100,我该怎么做?
谢谢!
【问题讨论】:
-
你的预期输出是什么?
我想堆叠具有连续名称的向量。
例如,我有
a1<-1:3
a2<-4:6
a3<-7:9
我知道我能帮你
z<-as.vector(rbind(a1,a2,a3))
如果我有 100 个 as、a1、a2、a3、...、a100,我该怎么做?
谢谢!
【问题讨论】:
您可以使用get() 访问变量。
您的示例将如下所示:
a_list <- list()
for(i in 1:3){
a_list[[i]] <- get(paste0("a",i))
}
z <- as.vector(do.call("rbind",a_list))
或者使用lapply:
as.vector(do.call("rbind",lapply(1:3,function(x){get(paste0("a",x))})))
然后你可以这样做,例如i in 1:100 或任何你需要的东西。
【讨论】:
我们可以使用mget。以下结果与您的示例代码相同。然后您可以将1:3 更改为1:100。
as.vector(matrix(unlist(mget(paste0("a", 1:3))), ncol = 3, byrow = TRUE))
[1] 1 4 7 2 5 8 3 6 9
【讨论】:
mget。
如果您将它们全部作为列表 'lst' 的成员,那么您可以简单地调用 do.call(rbind,lst) 或 do.call(c, lst) - 甚至是 unlist(lst)。所以诀窍是将变量放入列表中。您可以使用 'ls' 返回所需变量的名称,然后对这些名称使用 mget:
do.call(c, mget(ls(pattern="a[0-9]+")))
其中模式是一个正则表达式,用于查找全局环境中所有 a123 形式的变量。
【讨论】: