我有一个列表:
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 }}到f2
与i
,将x=i
应用于f2
与j
当我尝试1个列表中的1个函数的mapply时,它的工作方式正确
mapply(function(dat,fun)fun(dat),c(a,b),list(f1))
答案 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