将函数应用于从R中的特定模式开始的所有变量
我有一个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 <
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)))