绘制函数的函数

时间:2018-11-27 21:08:18

标签: r

所以我是R的新手,我需要绘制一些函数。我对R中的curve的理解是,它需要一个以x作为其单一输入的函数。由于我的函数都是同一主函数的不同表示,因此我首先想到要创建主函数,然后再分别定义每个特定函数。

# The principal function
puiss <- function(theta, inf, sup) {
  for(k in inf:sup) {
    total += (choose(30,k) * (theta^k) * ((1-theta)^(30-k)))
  }
}

# The specific functions I need to draw on the same plot
p1 <- function(x) { puiss(x,2,13) }
p2 <- function(x) { puiss(x,3,14) }
p3 <- function(x) { puiss(x,3,13) }

# Can't even get to trace just a single one... :'(
curve(p1,
0, 1,                              # from 0 to 1
main="puissance(theta)",           # title
xlab="x", ylab="theta")            # axes

curve(p2, add=T)                   # adding the other function
curve(p3, add=T)                   # adding the other function

我收到此错误:

'expr' did not evaluate to an object of length 'n'

我尝试了多种方法,但是这种方法似乎是最应该的。

在其他选择中,我尝试过:

  • 将特定功能从<-更改为=
  • 不使用{}(括号)来实现特定功能
  • for循环直接插入曲线,并用thetax适当地替换inf:sup
  • 尝试在p1(x)内使用curve
  • 我还读到有些时候需要Vectorize(),所以我在Vectorize(p1)内尝试过curve

我在做什么错了?

这可能有助于揭示我的主要功能只是在不同区域(边界内的总和,我的sigma为Binomial(30, theta)循环)中评估的for的质量函数(概率),因为我不知道如何在sigma中正确创建一个R函数。换句话说,它是一个累积分布函数

最终,我试图将3个特定功能一起绘制在同一张图上。

感谢您的帮助! :)

1 个答案:

答案 0 :(得分:1)

似乎您在函数定义中使用了某些Python(或类似代码)。 这是它的R版本,对我来说,将在调用curve时绘制结果。

puiss <- function(theta, inf, sup) {
  total = 0
  for(k in inf:sup) {
    # "+=" does not work for R
    total <- total + (choose(30,k) * (theta^k) * ((1-theta)^(30-k)))
  }
  # you need to use parentheses around total
  return(total)
}