Hi! I am doing a course about the R software and I have a couple of doubts.
In one of the tasks we were asigned, we have to perform a function that
simulates a bus' trip with 25 stops. In each of those stops, between 0 and
6 people can go on board. And when the total of passengers reaches 44, no
more people can go on board.
stops <- 25
passengers <- 0
register <- numeric(25)
bus <- function(register,stops,passengers) {
register[1] <- passengers
for (i in 1:stops) {
passengers <- passengers + sample(0:6,1)
register[i] <- passengers
}
# If the bus isn't full:
if (passengers >= 44) {
# Adjustment if it reaches 44 passenger, before the 25th stop:
register[i:stops] <- 44
cat('Full bus!\n') # Warning message...
break
} else {
# If the loop doesn't stop, a new register must be added:
register[i] <- passengers
}
# Para ir viendo cuánto hay:
cat('Stop', i, 'hay', passengers, 'passenger\n')
}
plot(register, xlab='Stop', ylab='No. of passengers')
The parts of the script that are marked in sky blue, are the ones that we
have to fill up, so on of those should be my mistake.
I would be very glad, if anyone can detect my error, as I have been many
days stuck on this part and my deadline is tomorrow.
Thx a lot in advance to everyone.
Wanda
BTW: Sorry for my English! My native language is Spanish! :)
[[alternative HTML version deleted]]
Hi again!
I am doing a course about the R software and I have a couple of doubts.
In one of the tasks we were asigned, we have to perform a function that
simulates a bus' trip with 25 stops. In each of those stops, between 0 and
6 people can go on board. And when the total of passengers reaches 44, no
more people can go on board.
stops <- 25
passengers <- 0
*register <- numeric(25)
*bus <- function(register,stops,passengers) {
register[1] <- passengers
for (i in 1:stops) {
*passengers <- passengers + sample(0:6,1)
*register[i] <- passengers
*}
# If the bus isn't full:
if (passengers >= 44) {
# Adjustment if it reaches 44 passenger, before the 25th stop:
register[i:stops] <- 44
cat('Full bus!\n') # Warning message...
break
*} else {
# If the loop doesn't stop, a new register must be added:
register[i] <- passengers
*}
# Para ir viendo cuánto hay:
cat('Stop', i, 'hay', passengers, 'passenger\n')
}
plot(register, xlab='Stop', ylab='No. of passengers')
The parts of the script that start with an asterisc are the sectors that we
should write, so is in there where my mistakes are.
The problem with my script is that when I get the plot the variable
"passengers" is always zero for all the bus' stops. So it seems
that my
loop isn't able to update the value for each iteration.
I would be very glad, if anyone can detect my error, as I have been many
days stuck on this part and my deadline is tomorrow.
Thanks a lot in advance to everyone. And thanks to Rainer who has recently
suggested me to include more information so you could be able to help me.
Wanda
PS: Sorry for my English! But Spanish is my first language!
--
Br. Wanda Iriarte
Teléfono de Contacto: 091 33 41 17
Área Genética
Dpto. de Genética y Mejora Animal
Facultad de Veterinaria, UdelaR
Montevideo, Uruguay
[[alternative HTML version deleted]]
Hello,
There's a no home work policy but since you've obviously tried, here it
goes.
The main problem with your function is that you are testing outside the
loop. Another problem is that your function doesn't return a value. Both
problems are corrected. I also include a function that does the same in
a vectorized way. As you can see with the tests below, they produce the
same output.
stops <- 25
passengers <- 0
register <- numeric(25)
bus <- function(register,stops,passengers) {
register[1] <- passengers
for (i in 1:stops) {
passengers <- passengers + sample(0:6, 1)
register[i] <- passengers
# Para ir viendo cuanto hay:
cat('Stop', i, 'hay', passengers,
'passenger\n')
}
# If the bus isn't full:
if (passengers >= 44) {
# Adjustment if it reaches 44 passenger, before the 25th stop:
register[register >= 44] <- 44
cat('Full bus!\n') # Warning message...
}
register # return value
}
bus2 <- function(register,stops,passengers){
passengers <- sample(0:6, stops, replace = TRUE) # All at once
register <- cumsum(passengers) # running sum of passengers
register[register >= 44] <- 44 # adjust for overflow
register
}
set.seed(3862) # To make reproducible runs
r1 <- bus(register,stops,passengers)
set.seed(3862)
r2 <- bus2(register,stops,passengers)
identical(r1, r2)
Note that in the corrected version of your function the if test is no
longer needed.
Hope this helps,
Rui Barradas
Em 18-12-2012 20:05, Wanda Iriarte escreveu:> Hi! I am doing a course about the R software and I have a couple of doubts.
>
> In one of the tasks we were asigned, we have to perform a function that
> simulates a bus' trip with 25 stops. In each of those stops, between 0
and
> 6 people can go on board. And when the total of passengers reaches 44, no
> more people can go on board.
>
> stops <- 25
>
> passengers <- 0
>
> register <- numeric(25)
>
> bus <- function(register,stops,passengers) {
>
> register[1] <- passengers
>
> for (i in 1:stops) {
>
> passengers <- passengers + sample(0:6,1)
>
> register[i] <- passengers
>
> }
>
> # If the bus isn't full:
>
> if (passengers >= 44) {
>
> # Adjustment if it reaches 44 passenger, before the 25th stop:
>
> register[i:stops] <- 44
>
> cat('Full bus!\n') # Warning message...
>
> break
>
> } else {
>
> # If the loop doesn't stop, a new register must be added:
>
> register[i] <- passengers
>
> }
>
> # Para ir viendo cuánto hay:
>
> cat('Stop', i, 'hay', passengers, 'passenger\n')
>
> }
>
> plot(register, xlab='Stop', ylab='No. of passengers')
>
> The parts of the script that are marked in sky blue, are the ones that we
> have to fill up, so on of those should be my mistake.
>
> I would be very glad, if anyone can detect my error, as I have been many
> days stuck on this part and my deadline is tomorrow.
>
> Thx a lot in advance to everyone.
>
> Wanda
>
> BTW: Sorry for my English! My native language is Spanish! :)
>
> [[alternative HTML version deleted]]
>
>
>
> ______________________________________________
> 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.
[[alternative HTML version deleted]]
Maybe Matching Threads
- How to selectively sum rows [Beginner question]
- Categorial Response Questions
- ¿Cómo puedo determinar cuellos de botella con información genética de poblaciones remanentes en R?
- xenconsole: Could not open tty `/dev/pts/5'': No such file or directory
- Selecting a linux distro for a xen-involved project