将 Map 与 mget 一起使用会产生意外输出
Using Map with mget yields unexpected output
我有很多列表:比如 list1、list2、....和 list 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
mget
returns 列表的列表(参见 "Value" 下的 ?mget
),而不是解析每个列表作为一个单独的向量进入 Map
。一种可能的处理方法是 Reduce
列表返回其原始元素,然后 rbind
它们,例如
Reduce(function(...) Map(rbind, ...), mget(paste0("x", 1:3)))
我有很多列表:比如 list1、list2、....和 list 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
mget
returns 列表的列表(参见 "Value" 下的 ?mget
),而不是解析每个列表作为一个单独的向量进入 Map
。一种可能的处理方法是 Reduce
列表返回其原始元素,然后 rbind
它们,例如
Reduce(function(...) Map(rbind, ...), mget(paste0("x", 1:3)))