gpt4 book ai didi

r - 具有多个条件的 if 语句更好,还是更多 else if 语句更好?

转载 作者:行者123 更新时间:2023-12-04 10:46:38 26 4
gpt4 key购买 nike

我是数学家,所以我对 IT 的东西了解不多。我想知道使用具有多个条件的语句或更多 if/else if 语句是否更快,如下例所示。假设我有一个非常大的数据表(有数百万行)并且在函数中有这个 if 语句 我将它应用于一列的每一行并且结果存储在新列中。我只是想知道这两种方法之间是否存在差异(更快/更慢/相同)。

    if (is.na(numerator) == TRUE){
result = 0
} else if (numerator == 0){
result = 0
} else if (is.na(denominator) == TRUE){
result = max
} else if (denominator == 0){
result = max
} else {
result = numerator/denominator
}

    if (is.na(numerator) == TRUE || numerator == 0){
result = 0
} else if (is.na(denominator) == TRUE || denominator == 0){
result = max
} else {
result = numerator/denominator
}

最佳答案

让我们做一个简单的实验!

虚拟数据

data <- data.frame(numerator = sample(c(0:9, NA), 10000, replace = T),
denominator = sample(c(0:9, NA), 10000, replace = T))

由两个“if”条件组成的两个函数

f1 <- function(x){
num <- x[1] ; denom <- x[2]
if (is.na(num)){
result = 0
} else if (num == 0){
result = 0
} else if (is.na(denom)){
result = Inf
} else if (denom == 0){
result = Inf
} else {
result = num / denom
}
return(result)
}

f2 <- function(x){
num <- x[1] ; denom <- x[2]
if (is.na(num) || num == 0){
result = 0
} else if (is.na(denom) || denom == 0){
result = Inf
} else {
result = num / denom
}
return(result)
}

基准分析

library(microbenchmark)
library(ggplot2)

res <- microbenchmark(
type1 = {
quotient1 <- apply(data, 1, f1)
}, type2 = {
quotient2 <- apply(data, 1, f2)
}, times = 100
)

res
# Unit: milliseconds
# expr min lq mean median uq max
# type1 21.91925 23.70445 27.16314 25.52339 26.90110 122.91710
# type2 22.00139 23.64297 26.11080 25.04576 26.46136 42.62506

autoplot(res)

enter image description here

结论

你可以多试几次benchmark,你会发现两个 if 条件之间没有显着差异。

关于r - 具有多个条件的 if 语句更好,还是更多 else if 语句更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52715054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com