【发布时间】:2019-12-02 19:36:46
【问题描述】:
我有一个虚拟非向量函数,它接受两个参数作为输入。我有一个类似(不完全相同)的矢量函数,适用于参数列表。
但是在非向量函数中,我也可以对参数本身进行一些操作(请参阅带有 cmets 的行)。我也在想办法在函数的向量形式中做同样的事情。
nonvectorfunction<-function(x,i){
if (i==1){
x<-x^0.5 # not implemented in vectorfunction
if (x==10){
x<-x+1
} else {
x<-x-1
}
}
if (i==2){
x<-x^(1/3) # not implemented in vectorfunction
if (x==10){
x<-x-1
} else {
x<-x+1
}
}
return(x)
}
vectorfunction <- function(x,i) {
x <- case_when(
i==1 ~ case_when(
x==10 ~ x+1,
TRUE ~ x-1),
i==2 ~ case_when (
x==10 ~ x-1,
TRUE ~ x+1
))
return(x)
}
sample.list<-c(10,9,8,10)
nonvectorfunction(sample.list[1],1)
nonvectorfunction(sample.list[3],2)
nonvectorfunction(sample.list,1)
vectorfunction(sample.list,1)
输出:
> nonvectorfunction(sample.list[1],1)
[1] 2.162278
> nonvectorfunction(sample.list[3],2)
[1] 3
> nonvectorfunction(sample.list,1)
[1] 2.162278 2.000000 1.828427 2.162278
Warning message:
In if (x == 10) { :
the condition has length > 1 and only the first element will be used
#this is expected because I am passing a list to non vector function
>
> vectorfunction(sample.list,1)
[1] 11 8 7 11
如上所示,矢量化函数可以很好地处理列表。
【问题讨论】:
标签: r