【发布时间】:2020-12-06 09:47:03
【问题描述】:
让我们考虑非常简单的功能:
find_max <- function(num) {
vec <- c()
t <- seq(-1,1,num)
for (i in 1:length(t)) {
for (j in 1:length(t)) {
vec <- append(vec, setNames(((i-j)/2),paste('i'=t[i],'j'=t[j])))
}
}
names(which.max(vec))
}
> find_max(0.1)
[1] "0.9 0.1"
返回取最大值的字符串。
另外让我们考虑另一个函数mean_bound,它接受包含两个字符串的向量,如果它们的均值小于 0.3,则返回 1,否则返回 0。
mean_bound <- function(strings) {
check_vec <- c()
convert_string <- as.numeric(unlist(strsplit((gsub(".*(\\d\\.\\d).*(\\d\\.\\d)", "\\1 \\2", strings)), " ")))
ifelse(mean(convert_string) < 0.3, check_vec <- 1, check_vec <- 0)
}
mean_bound(find_max(0.1))
0
现在我想创建函数find_mean_bound_max,它将完全执行find_max 正在做的事情,但添加了mean_bound 条件(以便找到两个最佳字符串)。这么简单地说,我想找到我们拥有的字符串:
你知道如何执行吗?我试图把这个 mean_bound 放在 find_max 的某个地方,但没有任何结果。
编辑
find_max
find_max(num) - 计算差 (i-j)/2 的函数,其中
i,j 是由seq(-1,1,num) 创建的数字(这个函数没有意义,但它只是为了示例而创建的)。它返回 i,j(作为字符串),其中差异 (i-j)/2 取最大值。
所以在我们之前提供的示例中:
find_max(0.1)
[1] "0.9 0.1"
因为 0.9-0.1 = 0.8 是集合 seq(-1,1,0.1) 中 i,j 中最大的。`
mean_bound
mean_bound 是一个函数,它接受两个字符串并将它们转换为数字。之后,它计算这些平均值,如果它小于 0.3,则返回 1,否则返回 0。在我们的示例中:
mean_bound(find_max(0.1))
它是mean_bound("0.9 0.1") 的等效形式。它返回 0,因为mean(c(0.9,0.1))=0.5>0.3
所以我正在寻找的是使用函数find_max 找到最大值,但条件是mean_bound 给出1。
所以find_mean_bound_max(num = 0.1) 的输出应该是 '0.4 0.1' 因为
(1) 差等于0.4 - 0.1 = 0.3
(2) 意思是(0.4 + 0.1)/2 = 0.25 < 0.3
希望现在它对你来说更干净了!
【问题讨论】:
-
我不清楚您的
find_max或mean_bound函数在做什么。您是否愿意接受不使用您编写的功能的解决方案?如果是,您能否提供 4-5 个示例输入及其对应的输出? -
嘿@RonakShah 非常感谢您的评论。我非常喜欢使用 find_max 和 mean_bound 的解决方案。我更新了我的问题以更清楚。如果您有任何问题,请告诉我!