[英]Apply a function to all variables starting with specific pattern in R
我有一個帶有變量test1
, test2
, test3
, test4
,.. testn
的R工作區。 這些變量都是相同長度的列表。 我想使用mapply()
合並這些列表,如以下示例所示:
test_matrix=mapply(c, test1, test2,..testn)
如何對所有以"test"
開頭的變量執行此操作,並按test1
, test2
,.. 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.