Построение функций функций - PullRequest
0 голосов
/ 28 ноября 2018

Итак, я новичок в R, и мне нужно написать некоторые функции.Насколько я понимаю, curve в R состоит в том, что для него требуется функция, которая имеет 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 зацикливается непосредственно на кривой и заменяет theta на x и inf:sup соответственно
  • , пытаясь использовать p1(x) внутри curve
  • Я также читал, что некоторыераз Vectorize() необходимо, поэтому я попробовал Vectorize(p1) внутри curve

Что я делаю не так?

Может помочь раскрыть, что моя основная функцияпросто функция массы (вероятности) Binomial(30, theta), оцененная в разных регионах(суммирование в границах, моя сигма, представляющая собой цикл for, потому что я не мог понять, как правильно создать функцию sigma в R).Другими словами, это кумулятивная функция распределения .

В конечном счете, я пытаюсь нанести 3 конкретные функции вместе на одном графике.

Спасибо заПомогите!:)

1 Ответ

0 голосов
/ 28 ноября 2018

Кажется, вы используете какой-то код 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...