Создайте функцию / forl oop, которая сравнивает каждый x со всеми y - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть эта функция, которая показывает, равно ли число а нулю или ближе к нулю, чем число 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)
 }

}

конечная цель состоит в том, чтобы определить вероятность того, что одно число а ближе к нулю, чем все 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)

Мне трудно понять, как изменить или создайте forl oop, чтобы он не вычислял строку за строкой и вместо этого для каждого a выплевывал 1 или 0 для всех значений b. После этого я могу легко сложить 1 и разделить на общее количество наблюдений, чтобы получить вероятность для каждого a.

Будем благодарны за любые предложения.

1 Ответ

1 голос
/ 27 февраля 2020

Я думаю, вы хотите 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, просто выполнение самого логического теста и приведение к числовому c вектору - это другое опция здесь:

f <- function(a, b) 1 * (((b < 0) & (a >= b) & (a <= -b)) | ((b > 0) & (a <= b) & (a >= -b)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...