【发布时间】:2019-07-07 19:19:48
【问题描述】:
我有一个清单:
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))
开关错误(x,
char1= 1,char2= 2,char3= 3): EXPR 必须是长度为 1 的向量
我看到switch 中的x 的长度应该是1。现在,我认为它把x 当作c(a, b)。
基本上我想用x=a申请f1到a,用x=b申请f1到b,用f2申请f2到i和@9876544342@,申请@986 @ 到 j 和 x=j
当我在 1 个列表上尝试 1 个函数的 mapply 时,它的工作方式是正确的
mapply(function(dat, fun) fun(dat), c(a,b), list(f1))
【问题讨论】:
-
注意
ls是一个函数名,2)列表元素需要加引号或者是对象标识符。还有,dat是什么@ -
我编辑了我的问题。我将 ls 更改为不同的变量,它仍然不起作用。我将 f1 单独映射到 c(a,b) 并且它按我想要的方式工作。 f1 应用于 a,x=a,f1 应用于 b,x=b 在 switch 中。 dat 什么都可以。我还可以定义:mapply(function(x,y)y(x) ls,list(f1,f2))
-
你可以在控制台中复制/粘贴
ls <- list(c(a,b),c(i,j))看看它是否有效? -
是的,这没有什么问题。在原始问题中也包含了 a、b、c 和 d 的值
标签: r list function switch-statement mapply