创建一个函数/forloop,将每个x与所有y';s
我有一个函数,它告诉我数字a是否等于或接近于数字b,其中1=是,0=否:创建一个函数/forloop,将每个x与所有y';s,r,function,R,Function,我有一个函数,它告诉我数字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) } 我很难弄清楚如何更改函数或创建forloop,这样它就不会逐行计算,相反,对于每个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)
}
我很难弄清楚如何更改函数或创建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
f=b)和(a0)和(a=-b)),1,0)
f(形式(10),形式(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)))
f=b)和(a0)和(a=-b)))
此处不需要ifelse
;您可以使用as.integer
或(使用一元+
)将布尔表达式转换为整数。示例:将ifelse(mtcars$cyl>5,0,1)
与+(!mtcars$cyl>5)
进行比较。在其他(不好的)事情中,ifelse
很慢,所以如果可以的话,通常最好避免它。对于数字a
和向量b
,f=function(a,b)mean(a
将给出b
的分数,其中a
更接近于零。
f <- function(a, b) 1 * (((b < 0) & (a >= b) & (a <= -b)) | ((b > 0) & (a <= b) & (a >= -b)))