2013-06-22 18 views
3

我有一個R工作空間,其變量爲test1,test2,test3,test4,testn。這些變量都是相同長度的列表。我想用mapply()這些列表結合,如下面的例子:將函數應用於以R中的特定模式開始的所有變量

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

如何做到這一點的,與"test"開始所有的變量,這麼做是爲了test1test2 .. testn

+2

我猜的'LS組合','GET'和'do.call' – Dason

+1

你有更多的比九個這樣的名單? – flodel

+0

可能有9個以上的列表,flodel。謝謝您的回答。我更新了我的腳本。 – user1560292

回答

5

要回答正是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))) 
3

這是一個可能性

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

謝謝你,我不知道獲取命令 – user1560292

2

如果我理解正確,這將你需要的東西:

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

test_matrixmatrix類的,與列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" 
+0

謝謝,這很好地工作。 – user1560292

相關問題