Hi, On Sat, Dec 28, 2013 at 10:46 AM, sun shine <phaedr...@gmail.com> wrote: > Hi > > I am attempting to translate some of the models that Donella Meadows wrote > about in her book "Thinking in systems" into code. Originally, I had wanted > to do this in Python, but thought that it would be fun to see if it is > feasible to do so in R, especially given the plotting capacity of R. > > Meadows describes a very simple example of a stock and flow: 50 gallons of > water in a bath tub - drain out at a rate of 5 gal/ minute and then turn on > the faucet after five minutes which flows at 5 gal/ min. The outcome is > obviously that after 5 minutes, the bath tub will maintain a steady stock of > 25 gal thereafter. > > My basic code in Python looks like this: > > ====Python code===== > > stock = 50 > time = 1 > inflow_a = 0 > inflow_b = 5 > outflow = 5 > > x = [stock] > y = [time] > > print "Model of inflow and outflow rates of water" > print "version 3" > print > > print stock > while time <= 5: > stock = (stock - outflow) + inflow_a > time += 1 > y += [time] > x += [stock] > print stock > if stock == 30: > print "Faucet turned on" > > while time >= 6 and time <= 9: > stock = (stock - outflow) + inflow_b > time += 1 > y += [time] > x += [stock] > print stock > > print "Volume in tub stabilises at %d gallons over %d minutes" % (stock, > time) > print x > print y > ==== end code==== > > I want to translate this into an equivalent script in R. > > After some searching around, I found how to set up a while loop, and > constructed the first section, like this: > > ======R code====== > > while(time <= 10) { > if time <= 5 > stock < > time <- time + 1 > print(time) > } > > ===== end code ===== > > However, what I would like to learn how to do is to nest the if conditions > in a way similar to that given in the Python code.
I don't see any nested conditions in the python code... A direct translation in R looks almost the same, except that you need to group using parentheses and brackets instead of whitespace, and there is no += in R (at least not that I'm aware of). Making those changes gives stock = 50 time = 1 inflow_a = 0 inflow_b = 5 outflow = 5 x = stock y = time print ("Model of inflow and outflow rates of water") print ("version 3") print (stock) while (time <= 9) { stock = (stock - outflow) + inflow_a time = time + 1 y = c(y, time) x = c(x, stock) print (stock) if (stock == 30) { print ("Faucet turned on") } } while (time >= 6 & time <= 9) { stock = (stock - outflow) + inflow_b time = time + 1 y = c(y, time) x = c(x, stock) print (stock) } sprintf("Volume in tub stabilises at %d gallons over %d minutes", stock, time) print (x) print (y) > > I'm sure that there must be some very elegant way to do this, but I cannot > find out how to do so in any of the books I have, nor do my web searches > throw back anything useful (I suspect that I'm not phrasing the question > properly). In both python and R you can of course use if/else instead of the two separate while loops. An R version is stock = 50 time = 1 inflow_a = 0 inflow_b = 5 outflow = 5 x = stock y = time print ("Model of inflow and outflow rates of water") print ("version 3\n") print (stock) while (time <= 9) { if(time <= 5) { stock = (stock - outflow) + inflow_a } else { stock = (stock - outflow) + inflow_b } time = time + 1 y = c(y, time) x = c(x, stock) print (stock) if (stock == 30) { print ("Faucet turned on") } } sprintf("Volume in tub stabilises at %d gallons over %d minutes", stock, time) print (x) print (y) plot(y, x) > > Can someone please offer a few suggestions about ways that I could translate > the Python script into R so that I can then run a plot as well? You can plot in python, e.g., from matplotlib.pyplot import * plot(y, x) show() Best, Ista > > Many thanks in anticipation. > > Sun > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.