Использование Map с mget дает неожиданный результат

У меня есть несколько списков: скажем, список1, список2,.... и список 100 и функция myfun. С ними я могу запустить Map(myfun,list1,list2,...,list100). Однако я не хочу записывать все номера списка, поэтому я попробовал Map(myfun,mget(paste0("list",1:100))). Но это не сработало. Воспроизводимый пример только с тремя списками приведен ниже:

x1<-list(1:10,10:20)
x2<-list(0:9,11:20)
x3<-list(100:109,41:50)

Map(rbind,x1,x2,x3) #ok
mget(paste0("x",1:3)) #ok
Map(rbind,mget(paste0("x",1:3))) #ok but the unexpected output

Map(rbind,mget(paste0("x",1:3)))
$x1
     [,1]       [,2]      
[1,] Integer,10 Integer,10

$x2
     [,1]       [,2]      
[1,] Integer,10 Integer,10

$x3
     [,1]       [,2]      
[1,] Integer,10 Integer,10

person user227710    schedule 01.03.2015    source источник
comment
mget возвращает список списков, по сравнению с использованием только x1 и т. д., которые являются отдельными объектами списка.   -  person David Arenburg    schedule 01.03.2015
comment
Ты прав. Любые альтернативы для включения номеров списка?   -  person user227710    schedule 01.03.2015
comment
Наверное что-то вроде Reduce(function(...) Map(rbind, ...), mget(paste0("x",1:3)))   -  person David Arenburg    schedule 01.03.2015
comment
Идеальный. Пожалуйста, опубликуйте это как ответ. Спасибо.   -  person user227710    schedule 01.03.2015


Ответы (1)


mget возвращает список из списка (см. ?mget в разделе "Значение"), в отличие от анализа каждого списка как отдельного вектора в Map. Возможный способ справиться с этим - Reduce вернуть список к его исходным элементам, а затем rbind их, что-то вроде

Reduce(function(...) Map(rbind, ...), mget(paste0("x", 1:3)))
person David Arenburg    schedule 01.03.2015
comment
NP, хотя может быть и более эффективное решение - person David Arenburg; 01.03.2015