簡體   English   中英

將函數應用於以R中的特定模式開頭的所有變量

[英]Apply a function to all variables starting with specific pattern in R

我有一個帶有變量test1test2test3test4 ,.. testn的R工作區。 這些變量都是相同長度的列表。 我想使用mapply()合並這些列表,如以下示例所示:

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

如何對所有以"test"開頭的變量執行此操作,並按test1test2 ,.. testn順序testn

要確切地回答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方法如果對象多於9個,則無法正確地對對象進行排序,因為它們是按字母順序排序的。 較長但完全健壯的版本為:

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)

如果我理解正確,這將滿足您的需求:

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

test_matrix將是類matrix ,具有列test1 ... testn ,但只要n<=9 如果您的情況下n可以大於9,則使用諸如test001名稱,這樣您就可以正確排序n=999

供您參考,我的“小提琴”:

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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM