R округляет произведение между положительными действительными числами x и y до 0 и 1 - PullRequest
0 голосов
/ 29 мая 2018

У меня есть эта функция, чтобы сделать продукты между двумя положительными числами, которые возвращают продукт, если он меньше или равен 1, в противном случае возвращает 1.

f1 <- function(x, y) ifelse(x*y <= 1, x*y, 1)

Меня раздражает, что я должен сделатьx * y вычисление дважды - есть ли базовая функция R, которая может сделать это, или другой способ выполнить задачу?Я знаю, что разница в вычислительном времени, возможно, небольшая (это O против 2 * O?), Но все же ... и из любопытства.

1 Ответ

0 голосов
/ 29 мая 2018

Мы создаем объект и затем выполняем присваивание

out <- x*y
out[out >1] <- 1

Или другой параметр pmin

out1 <- pmin(x*y, 1)

-checking

identical(out, out1)
#[1] TRUE

данные

set.seed(24)
x <- abs(rnorm(10, 0.5))
y <- abs(rnorm(10, 0.7))
...