gpt4 book ai didi

r - 在 R 中创建一个 "min"函数

转载 作者:行者123 更新时间:2023-12-04 11:44:55 25 4
gpt4 key购买 nike

我的一个 friend 最近参加期中考试,第一个问题要求他在不使用“sort()”或“min()”的情况下在 R 中创建自己的“baby.min()”函数。该函数的运行方式与“min()”相同。也就是说,min(x) 返回某个向量 x 中的最小值。

我是编程新手,因此想出了一个看似过于复杂的解决方案;但是,我想知道这个函数到底有多简洁。

作为引用,我对该功能的想法如下:

baby.min <- function(x){
if (length(x) == 0) {
return(Inf)
} else {
counter <- 0
for (i in 1:length(x)){
for (j in 1:length(x) & j != i){
if (x[i] <= x[j]) {
counter <- counter + 1
} else {
break
counter <- 0
}
}
if (counter == length(x) - 1){
return(x[i])
}
}
}
}

(同样,我知道这可能是一个糟糕的解决方案;我只是想看看比我更优秀的程序员可能会用不同的方式解决它。)

最佳答案

baby.min <- function(x) {
my_min = Inf
for (i in seq_along(x)) {
if (x[i] < my_min) my_min = x[i]
}
return(my_min)
}

baby.min(1:10)
# [1] 1

baby.min(integer(0))
# [1] Inf

x = rnorm(100)
identical(min(x), baby.min(x))
# [1] TRUE

仅适用于@bouncyball,带有na.rm 选项:

baby.min <- function(x, na.rm = FALSE) {
if (na.rm) {
x = na.omit(x)
} else {
if (anyNA(x)) return(NA)
}
my_min = Inf
for (i in seq_along(x)) {
if (x[i] < my_min) my_min = x[i]
}
return(my_min)
}

虽然,如果你想绕过“不要使用 sort()min()”,但要聪明一点,你可以做类似的事情这些 ;)

baby.min2 = function(x, ...) -max(-x, ...) # also handles na.rm
baby.min3 = function(x) x[order(x)][1]
baby.min4 = function(x) x[which.min(x)]

关于r - 在 R 中创建一个 "min"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47210571/

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