#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
цикле? Не могли бы вы показать фрагмент вашего кода или лучше создать новый пост с более подробной информацией.