chance<-c(0.11,0.12,0.13,0.14,0.15)
aaa<-function(x,y) {
assignChance <- function (a,b,v) {
if (a == 0)
if (b == 0) 1-v
else v
else
if (b == 0) 0
else 1
}
sapply(x,assignChance,y,chance) # this is wrong
}
aaa(c(1,1,0,0,1),c(1,1,1,0,0))
我希望结果为:1,1,0.13,0.86,0
这个功能有没有更好的方法。我觉得我目前的尝试非常难看,因为在函数式语言中我可以使用Array.map3
plue pattern match
。
switch
的矢量版本是否与ifelse
一样?
答案 0 :(得分:6)
您正在寻找mapply
:
mapply(assignChance,x,y,chance)
在您的代码中使用sapply
,您依次将assignChance
函数应用于x
的每个元素,并且您将传递为b
和{{1你的整个向量v
和y
参数。因此,例如,对于chance
的第一次迭代,结果调用将是:
sapply
而不是:
assignChance(x[1],y,chance)