我有一個R工作空間,其變量爲test1
,test2
,test3
,test4
,testn
。這些變量都是相同長度的列表。我想用mapply()
這些列表結合,如下面的例子:將函數應用於以R中的特定模式開始的所有變量
test_matrix=mapply(c, test1, test2,..testn)
如何做到這一點的,與"test"
開始所有的變量,這麼做是爲了test1
,test2
.. testn
?
我有一個R工作空間,其變量爲test1
,test2
,test3
,test4
,testn
。這些變量都是相同長度的列表。我想用mapply()
這些列表結合,如下面的例子:將函數應用於以R中的特定模式開始的所有變量
test_matrix=mapply(c, test1, test2,..testn)
如何做到這一點的,與"test"
開始所有的變量,這麼做是爲了test1
,test2
.. testn
?
要回答正是OP要求(mapply(c, test1, test2,..testn)
),這樣做:
do.call(mapply, c(FUN = c, mget(paste0("test", 1:n))))
如果你不」 t知道你有多少(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)))
這是一個可能性
test1 <- list(1,2,3)
test2 <- list(3,4,5)
test3 <- list(5,6,7)
varnames <- ls(pattern="test.*")
sapply(varnames, get)
謝謝你,我不知道獲取命令 – user1560292
如果我理解正確,這將你需要的東西:
test_matrix <- mapply(get, ls(pattern='test*'))
的test_matrix
將matrix
類的,與列test1
... testn
,但只要n<=9
。如果在你的情況下,n
可以大於9,那麼使用test001
這樣的名稱,這樣你應該得到正確的訂購n=999
。
供您參考,我的 「R-小提琴」:
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"
謝謝,這很好地工作。 – user1560292
我猜的'LS組合','GET'和'do.call' – Dason
你有更多的比九個這樣的名單? – flodel
可能有9個以上的列表,flodel。謝謝您的回答。我更新了我的腳本。 – user1560292