将函数应用于从R中的特定模式开始的所有变量

将函数应用于从R中的特定模式开始的所有变量,r,R,我有一个R工作区,其中包含变量test1,test2,test3,test4,…testn。这些变量都是相同长度的列表。我想使用mapply()组合这些列表,如下例所示: test_matrix=mapply(c, test1, test2,..testn) 如何对所有以“test”开头的变量执行此操作,并按顺序执行test1,test2,…testn?这里有一种可能性 test1 <- list(1,2,3) test2 <- list(3,4,5) test3 <

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

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

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

这里有一种可能性

test1 <- list(1,2,3)
test2 <- list(3,4,5)
test3 <- list(5,6,7)
varnames <- ls(pattern="test.*")
sapply(varnames, get)

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

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

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


如果您不知道有多少(
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)))

test.list我猜是由
ls(pattern=“test.*)
get
do.call组合而成的。你有九个以上这样的列表吗?可能有九个以上的列表,弗洛德尔。谢谢你的回答。我已经更新了我的脚本。
do.call(mapply, c(FUN = c, mget(ls(pattern = "^test\\d+$"))))
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)))