将 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=应用f1
到b
,应用f2
到 i
与 x=i
,应用 f2
到 j
与 x=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
我有一个列表:
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=应用f1
到b
,应用f2
到 i
与 x=i
,应用 f2
到 j
与 x=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