Как запустить двойной л oop с помощью R - PullRequest
0 голосов
/ 08 января 2020

У меня есть следующее MWE:

library(ggplot2)

N <- 199
K <- N+1
x <- rep(0,N)
x[1] <- 0.5
time <- c(1:K)

G <- c(2.7, 2.9, 3.0, 3.5, 3.82, 3.83, 3.84, 3.85)
g <- 2.7

for (t in 1:N) {
  x[t+1] = g*x[t]*(1-x[t])
}
plot(time,x)

В этом коде G не используется и является вектором значений для g. В настоящее время у меня есть участок для первого значения g=2.7. То, что я хочу сделать, это l oop через значения G и создать отдельные графики для каждого. У меня есть следующий код, с которым я пытаюсь сделать это:

for (g in G) {
  x_g <- N+1
  x_g[1] <- 0.5
  for (t in 1:N) {
    x_g[t+1] = g*x_g[t]*(1-x_g[t])
    plot(time,x_g)
}
}

Это выдает следующее сообщение об ошибке:

Error in xy.coords(x, y, xlabel, ylabel, log) : 
  'x' and 'y' lengths differ

Я пытаюсь создать отдельные переменные x_g как Я не могу понять, как «стереть» значения x из исходного кода. Я думаю:

  1. Использование for(g in G) l oop неправильно
  2. Использование неправильного подхода с использованием отдельных x_g переменных

Любые советы о том, как подойти к этому / сделать это правильно? Я не знаком с использованием матриц в R, это верный способ решения этих проблем?

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Аналогично @ThomasIsCoding, но не создает переменные x_g:

library(ggplot2)

N <- 199
K <- N+1
x <- rep(0,N)
x[1] <- 0.5
time <- c(1:K)

G <- c(2.7, 2.9, 3.0, 3.5, 3.82, 3.83, 3.84, 3.85)
g <- 2.7

for (g in G) {
  for (t in 1:N) {
    x[t+1] = g*x[t]*(1-x[t])
  }
  plot(time,x, main = g)
}
1 голос
/ 08 января 2020

Пытаясь сохранить ваш стиль кода, я думаю, что ваш вложенный for l oop может выглядеть примерно так:

for (g in G) {
  x_g <- rep(0,N+1)
  x_g[1] <- 0.5
  for (t in 1:N) {
    x_g[t+1] = g*x_g[t]*(1-x_g[t])
  }
  plot(time,x_g)
}
...