r - 创建一个函数/forloop,将每个 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)))
推荐阅读
- amazon-web-services - S3 用户的 AWS 访问密钥 - 密钥有效,但在 AWS 账户的 IAM 用户的任何地方都看不到它
- java - 如何从编辑文本中添加所有值并在另一个活动列表视图上显示总值
- android - 如何使用数据绑定从 XML 调用接口方法?
- amazon-web-services - 'PERL_EXECUTABLE-NOTFOUND' 不是内部或外部命令、可运行程序或批处理文件
- c++ - slurm 中的优雅信号处理
- reactjs - 输入值代码拒绝在反应 js 中工作
- laravel - 如何让微服务相互通信?
- python - 我尝试在特定键处添加列表,但字典中的列表为空
- mathjax - 带有编号方程的 MathJax
- reactjs - 使用 jspsych-react 进行反应的 Jspsych 实验