[R] Problem when index is given by a changing formula in loop - BUG??

R. Michael Weylandt michael.weylandt at gmail.com
Fri May 18 14:54:55 CEST 2012


No it's not a bug in R.

Indexing can only occur by integers so there's an automatic conversion
to integer inside of `[`. Your "insert" variable is actually slightly
less than 8 (note as.integer(insert) == 7) by some amount that's too
small to print, but the computer still picks up on.

More concretely:

x <- 1:10

x[2]
x[3]
x[2.2]
x[2.8]
x[2.999999]

x[insert]
x[as.integer(insert)]
x[round(insert)]

Hopefully that helps clear things up,

Michael

On Fri, May 18, 2012 at 7:50 AM, greatest.possible.newbie
<daniel.hoop at gmx.net> wrote:
> Dear community,
>
> I have a little problem filling in a vector with loop output.
> I think the problem is the following: I am caluclating the index which
> indicates where the loop output should be placed at by a formula. But when I
> want to fill in or read out some specific index places this doesn't work
> properly. Let me show you my code:
>
> # CODE
> ################
> ln_0 <- 0
> ln_max <- 20
> ln_schritt <- 0.1
> l_frak_0 <- 25
> g_l_frak_0 <- 0.5
> ln_auslastung <- 2
>
> l_frak <- rep(0, 1+(ln_max-ln_0)/ln_schritt)
> ln <- ln_0
>
> while (ln < (ln_max+ln_schritt))
> {
>  insert <- 1+ (ln-ln_0)/ln_schritt
>  l_frak[insert] <-  100
> #l_frak_0 / g_l_frak_0 + floor(ln/ln_auslastung) * l_frak_0/g_l_frak_0 *
> (1-g_l_frak_0)  -  l_frak_0 * (1-g_l_frak_0) * ln
> # for simplification I replace the real formula by 100
>
>  ln <- ln + ln_schritt
> }
> names(l_frak) <- seq(ln_0, ln_max, ln_schritt)
> #names(l_frak) <- c(1:length(l_frak))
> l_frak[which(l_frak[]==0)]
> # 0.7  1.2 18.9
> #  0    0    0
> # The places in the vector where the filling in doesn't work:
> # 8   13   190
>
> # Now try the following:
> #################
> ln <- 0.7
> insert <- 1+ (ln-ln_0)/ln_schritt
> insert
> # [1] 8
> # BUT:
> l_frak[insert]
> # 0.6
> #  10
> # But it should yield
> l_frak[8]
> # 0.7
> #   0
> #########
> # END CODE
>
> When I change the mode of the variable "insert" to numeric this doesn't
> change anything. When I change it to
> as.numeric(as.character(1+ (ln-ln_0)/ln_schritt))
> Then the place where the filling in doesn't work is at
> 9.9 or at the 100th
> place of the vector.
>
> Is this a bug??
>
> Thank you for your help,
> Daniel
>
>
> --
> View this message in context: http://r.789695.n4.nabble.com/Problem-when-index-is-given-by-a-changing-formula-in-loop-BUG-tp4630492.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at 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.



More information about the R-help mailing list