मैं निम्नलिखित कोड पर एक लूप चलाने की कोशिश कर रहा हूँ:

library(tidyverse)
library(cowplot)

#Setup of Variables
N <- 199
K <- N+1
x <- rep(0,N)
x[1] <- 0.5
g <- 3.84
time <- c(1:K)

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

A <- data.frame(time,x)

#create separate plots 1 & 2 --> combine into plot3 using ggdraw()
plot1 <- ggplot(data=A, aes(x=time, y=x)) + geom_line(color="blue") + xlim(0,150) + ylab("Fish Stock") + theme_classic()

plot2 <- ggplot(data=A, aes(x=time, y=x)) + geom_line(color="forestgreen") + xlim(8,15) + theme(legend.position="none", axis.title.x=element_blank(), axis.title.y=element_blank(), panel.border=element_blank(), panel.grid.major=element_blank(), panel.grid.minor=element_blank(), axis.line=element_line(colour="black"), panel.background=element_rect(fill="white",colour="white"))

plot3 <- 
  ggdraw() +
  draw_plot(plot1) + 
  draw_plot(plot2, .68, .68, .3, .3) #insetplot, x, y, width, height

plot3

जो निम्नलिखित ग्राफिक बनाता है:

enter image description here

मैं इसके साथ क्या करना चाहता हूं, इस लूप को दूसरे के भीतर घोंसला बनाना है जो g के मानों के वेक्टर के माध्यम से लूप करता है। इस कोड पर मेरा प्रयास इस प्रकार है:

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

#Loop --> creation of x, dataframe, insetplots
for (g in G) {
  for (t in 1:N){
    x[t+1] = g*x[t]*(1-x[t])
  }

  A <- data.frame(time,x)

  plot1 <- ggplot(data=A, aes(x=time, y=x)) + geom_line(color="blue") + xlim(0,150) + ylab("Fish Stock") + theme_classic()
  plot2 <- ggplot(data=A, aes(x=time, y=x)) + geom_line(color="forestgreen") + xlim(8,15) + theme(legend.position="none", axis.title.x=element_blank(), axis.title.y=element_blank(), panel.border=element_blank(), panel.grid.major=element_blank(), panel.grid.minor=element_blank(), axis.line=element_line(colour="black"), panel.background=element_rect(fill="white",colour="white"))
  plot3 <- 
  ggdraw() +
  draw_plot(plot1) + 
  draw_plot(plot2, .68, .68, .3, .3) #insetplot, x, y, width, height

  png(file = paste0("Fish-Stock-Inset_", g, ".png"))
  plot3
  dev.off()
}

हालांकि, मुझे रिक्त छवियों की एक श्रृंखला मिलती है। भूखंडों की बचत सही है क्योंकि मुझे ठीक से नामित फाइलें मिलती हैं, लेकिन ग्राफ स्वयं गायब हैं। मैं लगभग निश्चित हूं कि प्रारंभिक for (t in 1:N) लूप के बाद A <- data.frame(time,x) के मेरे प्लेसमेंट के साथ समस्या आती है।

मुझे खेद है कि यह केवल एक डिबगिंग प्रश्न है, लेकिन मुझे आशा है कि यह इसी मुद्दे में चलने वाले अन्य लोगों के लिए सहायक होगा।

1
Brennan 9 जिंदा 2020, 21:16

1 उत्तर

सबसे बढ़िया उत्तर

आपकी समस्या उत्पन्न होती है क्योंकि प्लॉट 3 का मूल्यांकन केवल लूप के अंत में किया जाता है (आर में आलसी मूल्यांकन कहा जाता है)।

इसे नीचे आज़माएं, जहां मैं प्लॉट को रेंडर करने के लिए ggsave का उपयोग करता हूं और अपने x को लूप के अंदर घोषित करने के लिए नोट करता हूं:

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

#Loop --> creation of x, dataframe, insetplots
for (g in G) {
  x <- rep(0,N)
  x[1] <- 0.5
  for (t in 1:N){
    x[t+1] = g*x[t]*(1-x[t])
  }

  A <- data.frame(time,x)

  plot1 <- ggplot(data=A, aes(x=time, y=x)) + geom_line(color="blue") + xlim(0,150) + ylab("Fish Stock") + theme_classic()
  plot2 <- ggplot(data=A, aes(x=time, y=x)) + geom_line(color="forestgreen") + xlim(8,15) + 
  theme(legend.position="none", axis.title.x=element_blank(), 
  axis.title.y=element_blank(), panel.border=element_blank(), 
  panel.grid.major=element_blank(), panel.grid.minor=element_blank(), 
  axis.line=element_line(colour="black"), 
  panel.background=element_rect(fill="white",colour="white"))
  plot3 <- 
    ggdraw() +
    draw_plot(plot1) + 
    draw_plot(plot2, .68, .68, .3, .3) #insetplot, x, y, width, height

  ggsave(plot3,file = paste0("Fish-Stock-Inset_", g, ".png"))
}
1
StupidWolf 9 जिंदा 2020, 18:36