R将正实数x和y之间的乘积有效地舍入到0和1之间

时间:2018-05-29 07:53:04

标签: r if-statement rounding

我正在使用此功能在两个正数之间生成产品,如果它小于或等于1,则返回产品,否则返回1.

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

让我感到恼火的是,我必须进行两次x * y计算 - 是否有可以执行此操作的基本R函数,或其他方式来执行此任务?我知道计算时间的差异可能很小(是O对2 * O?)但仍然......出于好奇。

1 个答案:

答案 0 :(得分:2)

我们创建对象,然后进行分配

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

或另一个选项是pmin

out1 <- pmin(x*y, 1)

- 检查

identical(out, out1)
#[1] TRUE

数据

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