4

我有一个带有变量test1, test2, test3, test4,..的 R 工作区testn。这些变量都是相同长度的列表。我想使用 组合这些列表mapply(),如下例所示:

    test_matrix=mapply(c, test1, test2,..testn)

我如何对所有以 开头的变量执行此"test"操作,并按顺序执行test1, test2,.. testn

4

3 回答 3

6

要准确回答 OP 的要求 ( mapply(c, test1, test2,..testn)),请执行以下操作:

do.call(mapply, c(FUN = c, mget(paste0("test", 1:n))))

如果您不知道n您有多少 ( ) 列表并希望使用模式找到它们:

do.call(mapply, c(FUN = c, mget(ls(pattern = "^test\\d+$"))))

与到目前为止的其他答案一样,ls如果对象超过九个,则使用此方法将无法正确排序对象,因为它们是按字母顺序排序的。更长但完全健壮的版本是:

test.lists    <- ls(pattern = "^test\\d+$")
ordered.lists <- test.lists[order(as.integer(sub("test", "", test.lists)))]
do.call(mapply, c(FUN = c, mget(ordered.lists)))
于 2013-06-22T20:46:29.340 回答
3

这是一种可能性

test1 <- list(1,2,3)
test2 <- list(3,4,5)
test3 <- list(5,6,7)
varnames <- ls(pattern="test.*")
sapply(varnames, get)
于 2013-06-22T16:36:01.273 回答
2

如果我理解正确,这将满足您的需求:

test_matrix <- mapply(get, ls(pattern='test*'))

test_matrix是类的matrix,带有列test1... testn,但只要n<=9. 如果在您的情况下n可以大于 9,则使用类似 的名称test001,这样您应该得到正确的排序到n=999.

供您参考,我的“r-fiddles”:

test2 <- 2:5
test1 <- 1:4

m <- mapply(get, ls(pattern='test*'))
m
     test1 test2
[1,]     1     2
[2,]     2     3
[3,]     3     4
[4,]     4     5
class(m)
[1] "matrix"
于 2013-06-22T16:50:31.240 回答