r语言 - 创建一个函数/for循环,将每个x与所有y进行比较



我有一个函数,它显示数字a是否等于或接近于零,而不是数字b,其中1=是,0=否:

f <- function(a,b){
if(((b<0)&(a>= b)&(a<=-b))|((b>0)&(a<= b)&(a>=-b)))
{
print(1)
}
else
{
print(0)
}

}

最终目标是确定单个数字a比所有数字b更接近零的概率。

示例:

a  b  prob
1  3   100% (a is equidistant or closer to zero than 5/5 b's)
2  2   60% (a is equidistant or closer to zero than 3/5 b's)
3  1   20% (a is equidistant or closer to zero than 1/5 b's)
4  1    0% (a is equidistant or closer to zero than 0/5 b's)
5  2    0% (a is equidistant or closer to zero than 0/5 b's)

我很难弄清楚如何更改函数或创建forloop,这样它就不会逐行计算,相反,对于每个a,它会为b的所有值吐出1或0。之后,我可以很容易地将1加在一起,除以观察总数,得到每个a的概率。

如有任何建议,我们将不胜感激。

我想您想要ifelse,它将输入和输出矢量化

f <- function(a, b) ifelse(((b < 0)&(a >= b)&(a <= -b))|((b > 0)&(a <= b)&(a >= -b)), 1, 0)
f(rnorm(10), rnorm(10))
#> [1] 1 0 0 1 0 0 1 0 0 1

尽管正如@MauritsEvers所指出的,仅仅进行逻辑测试并强制为数字向量是另一种选择:

f <- function(a, b) 1 * (((b < 0) & (a >= b) & (a <= -b)) | ((b > 0) & (a <= b) & (a >= -b)))

最新更新