将mapply应用于列表的各个元素

时间:2019-07-07 19:19:48

标签: r list function switch-statement mapply

我有一个列表:

ls <- list(c(a,b),c(i,j))
a<-"char1"
b<-"char2"
i<-"char4"
j<-"char5"

我需要将以下功能应用于列表的各个元素

f1<- function(x) {
  switch(x,
         "char1"=1,
         "char2"=2,
         "char3"=3
  )
}

f2 <- function(x){
  switch(x,
         "char4"=1,
         "char5"=2,
         "char6"=3
  )
}

这是我尝试过的,但出现错误

mapply(function(dat, fun) fun(dat), ls, list(f1,f2))
  

switch(x,char1 = 1,char2 = 2,char3 = 3)中的错误:       EXPR必须是长度为1的向量

我看到x中的switch的长度应该为1。现在,我认为它将x作为c(a, b)

基本上,我想将f1应用于a,将x=a应用于f1,将b应用于x=b,并将{{1 }}到f2i,将x=i应用于f2j

当我尝试1个列表中的1个函数的mapply时,它的工作方式正确

mapply(function(dat,fun)fun(dat),c(a,b),list(f1))

1 个答案:

答案 0 :(得分:1)

这些函数仅采用长度为1的向量。因此,我们可以Vectorize

Map(function(dat, fun) fun(dat), ls, list(Vectorize(f1), Vectorize(f2)))
#[[1]]
#char1 char2 
#    1     2 

#[[2]]
#char4 char5 
#    1     2