我正在使用此功能在两个正数之间生成产品,如果它小于或等于1,则返回产品,否则返回1.
f1 <- function(x, y) ifelse(x*y <= 1, x*y, 1)
让我感到恼火的是,我必须进行两次x * y计算 - 是否有可以执行此操作的基本R函数,或其他方式来执行此任务?我知道计算时间的差异可能很小(是O对2 * O?)但仍然......出于好奇。
答案 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))