将 mapply 用于列表的各个元素

Using mapply to individual elements of list

我有一个列表:

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))

Error in switch(x, char1 = 1, char2 = 2, char3 = 3) : EXPR must be a length 1 vector

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

基本上我想用[=24=将f1应用到a,用[=27=应用f1b,应用f2ix=i,应用 f2jx=j

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

mapply(函数(dat, fun) fun(dat), c(a,b), list(f1))

这些函数只接受长度为 1 的向量。因此,我们可以 Vectorize

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

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