цикл за циклом для вычисления суммы функции последовательности «непрерывное произведение» в R

#r #function #loops #package

#r #функция #циклы #пакет

Вопрос:

Я пытаюсь вычислить значение для следующего уравнения в R.

введите описание изображения здесь

У меня есть набор данных и значение для каждого соответствующего F_x, F_{x 1}…

Однако, поскольку оба Q и s имеют слишком много значений, я рассматриваю возможность написания цикла в цикле. Это немного запутано. Поскольку цикл для Q кажется противоречивым, поскольку цикл для s

Но если я напишу цикл, как показано ниже, кажется, что мне нужно вручную вычислить Q 100 раз, чтобы получить весь ответ. Также мой цикл кажется неправильным…Как я могу решить эту проблему? Большое вам спасибо

 Y <- function(x,s, Q){
  n <- length(s-x)-1
  Q <- c(1:100)

    for(s in seq(1:n)){

     Y[s] <- sum(s*Q[s]*cumprod(Fx[1:s])) 
    }
return(Y)
}
  

Комментарии:

1. Пара примеров с ожидаемым ответом помогла бы нам проверить наши решения. Я уверен, что есть лучший ответ, чем 3 вложенных for цикла.

2. Кроме того, вы продолжаете перезаписывать Y в своем цикле. Вас интересует только ее последнее значение, или вы также хотите, чтобы все промежуточные значения? Кроме того, я думаю, вам нужно cumprod(Fx[1:s]) вместо cumprod(Fx[s]) , поскольку вы хотите умножить все значения из Fx1 в Fxs.

Ответ №1:

Я не уверен, достигает ли приведенный ниже код вашей цели

 Y <- function(x,s) {
  Q <- 1:100
  S <- 1:(s-x)
  outer(Q,S,FUN = function(q,s) q * sum(c(1:s) * cumprod(Fx[1:s])))
}
  

for версия цикла

 Y <- function(x,s) {
  nr <- 100
  nc <- s-x
  y <- matrix(nr*nc,nrow = nr)
  for (Q in 1:nr) {
    for (S in 1:nc) {
      y[Q,S] <- Q * sum(c(1:S) * cumprod(Fx[1:S]))
    }
  }
  y
}
  

Комментарии:

1. Спасибо за помощь! Можем ли мы записать в формате цикла for?

2. Спасибо за ваше время. Еще одна проблема. Если вместо QS*Fx , если это (2 Q)^(-S)*Fx как я могу изменить это уравнение? Я пытался использовать (2 Q)^(-S) , он отлично работает по отдельности, но когда я смешиваю в цикле, он выдает ошибку как «неиспользуемый аргумент (-c (1: s))»

3. @ScarlettZhao Как вы используете это в for цикле? Не могли бы вы показать фрагмент вашего кода или лучше создать новый пост с более подробной информацией.