【发布时间】:2021-01-08 11:14:56
【问题描述】:
我有一个函数可以返回一些值的乘积。所以我在计算了所有值之后使用了函数prod,如果我使用具有一个特定值的函数,它就可以完美地工作。但是当我在一个区间内使用它时(例如,在下图中,使用 geom_function),该函数会给出一个常数,并带有警告。
所以我尝试在函数的每一步迭代产品,而不是在最后使用 prod。而且它会在没有警告的情况下工作。
我想知道你是否知道它为什么会这样。
我加入你的图片(在链接中)和我使用的代码。
library(tidyverse)
library(patchwork)
# Simulation de données
set.seed(1993)
vec <- c(0.1, 0.2, 0.3, 0.4, 0.5)
index <- rbinom(n = 20, size = 4, prob = 0.4) + 1
# Fonction avec prod
produit1 <- function(vec, index, power) {
probs <- numeric(length = length(index))
for (i in seq_along(index)) {
probs[i] <- vec[index[i]] * power
}
prod(probs)
}
# Fonction sans prod
produit2 <- function(vec, index, power) {
probs <- 1
for (i in seq_along(index)) {
probs <- probs * vec[index[i]] * power
}
return(probs)
}
# Représentation graphique
abscisses <- seq(-1, 1, 0.1)
fct1_res <- numeric(length = length(abscisses))
fct2_res <- numeric(length = length(abscisses))
for (i in seq_along(abscisses)) {
fct1_res[i] <- produit1(vec = vec, index = index, power = abscisses[i])
fct2_res[i] <- produit2(vec = vec, index = index, power = abscisses[i])
}
avec_prod <- ggplot(data = NULL) +
geom_line(aes(x = abscisses, y = fct1_res), color = "blue") +
geom_function(fun = function(x) {produit1(vec = vec, index = index, power = x)}, color = "red") +
labs(title = "Function with prod")
sans_prod <- ggplot(data = NULL) +
geom_line(aes(x = abscisses, y = fct2_res), color = "blue") +
geom_function(fun = function(x) {produit2(vec = vec, index = index, power = x)}, color = "red") +
labs(title = "Function without prod")
avec_prod | sans_prod
每个函数的结果图
【问题讨论】:
-
欢迎来到 Stack Overflow!问候往往是不鼓励的。请记住,这个问题应该是通用的,并且要保持简短并且不鼓励他们。有关更多信息,请参阅此Meta post。这可能看起来没有人情味,但请记住,您可能不是唯一需要解决此类问题的人
-
感谢您对此的澄清。
-
没问题!也是在Guidelines我当时只是找不到链接。
-
问候这件事引起了激烈的争论,两者都有很好的意见。我个人不介意他们。无论如何,不是这里的问题。您最近的编辑不是必需的 - 无需在问题中添加答案或“已解决”。通过接受答案,您已经标记了这个!当您想要添加最初不是您问题的一部分并且可能有助于更好地理解您的问题的新信息时,请更改/更新问题。新年快乐。感谢您的贡献。
-
另外 - 这是一个好并且问得很好的第一个问题!