Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 函数在另一个函数中使用时返回一个常量_R_Function_Ggplot2 - Fatal编程技术网

R 函数在另一个函数中使用时返回一个常量

R 函数在另一个函数中使用时返回一个常量,r,function,ggplot2,R,Function,Ggplot2,我有一个函数,它返回一些值的乘积。因此,在计算完所有值后,我使用了函数prod,如果我使用带有一个特定值的函数,它就可以完美地工作。但是当我在一个区间上使用它时(例如,在下面的图中,使用geom_函数),函数给出一个常数,并带有一个警告 因此,我尝试在函数的每一步迭代产品,而不是在最后使用prod。它毫无预警地工作 我想知道你是否知道它为什么会这样 我加入你的形象(在链接)和代码,我用 library(tidyverse) library(patchwork) # Simulation de

我有一个函数,它返回一些值的乘积。因此,在计算完所有值后,我使用了函数
prod
,如果我使用带有一个特定值的函数,它就可以完美地工作。但是当我在一个区间上使用它时(例如,在下面的图中,使用geom_函数),函数给出一个常数,并带有一个警告

因此,我尝试在函数的每一步迭代产品,而不是在最后使用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
库(tidyverse)
图书馆(拼凑)
#模拟德多涅斯
种子集(1993年)

vec问题在于,函数没有矢量化,而
geom_函数
需要矢量化函数(请参见
?geom_函数
),即当您在绘图代码中调用函数时,
geom_函数
横坐标
的向量传递给自定义函数。解决这个问题的一个办法是将你的函数矢量化,使它们在矢量上工作。下面的“快速而肮脏”方法在
横坐标上循环:


avec\u prod欢迎使用堆栈溢出!打招呼往往不受鼓励。请记住,这个问题是要具有普遍性的,并且要尽量简短,尽量让他们感到气馁。有关更多信息,请参见此。这可能看起来没有人情味,但请记住,你可能不是唯一一个需要回答这类问题的人。谢谢你对此的澄清。没问题!这也是我当时找不到的链接。问候的问题引起了激烈的争论,双方都有很好的意见。我个人并不介意。无论如何,这不是问题所在。您最近的编辑是没有必要的-没有必要添加答案或“解决”的问题。通过接受答案,您已经标记了这一点!当您希望添加新信息时,请更改/更新问题,这些信息原本不是问题的一部分,可能有助于更好地理解您的问题。新年快乐。谢谢你的贡献。而且-这是一个很好的,问得很好的第一个问题!好的,非常感谢您的快速回答。呃——只是好奇您在哪里添加了“prod()”?@tjebo
prod
在自定义函数
produit1
中被调用。但我还没有将其包含在reprex中(或者最好将其删除)。(;是的,对。谢谢你的澄清。我承认,reprex标签有误导性,哈哈