[R] How to visualise what code is processed within a for loop

Luca Meyer |uc@m1968 @end|ng |rom gm@||@com
Sat Apr 28 21:45:15 CEST 2018


Thanks Don,

    for (i in 1:10){
      nm <- paste0("V", i)
      d0[[nm]] <- ifelse( regexpr(d1[i,1], d0$X0) > 0, 1, 0)
    }

is exaclty what I needed.

Best regards,

Luca


2018-04-25 23:03 GMT+02:00 MacQueen, Don <macqueen1 using llnl.gov>:

> Your code doesn't make sense to me in a couple of ways.
>
> Inside the loop, the first line assigns a value to an object named "t".
> Then, the second line does the same thing, assigns a value to an object
> named "t".
>
> The value of the object named "t" after the second line will be the output
> of the ifelse() expression, whatever that is. This has the effect of making
> the first line irrelevant. Whatever value t has after the first line is
> replaced by whatever it gets from the second line.
>
> It looks like the first line inside the loop is constructing the name of a
> data frame column, and storing that name as a character string. However,
> the second line doesn't use that name at all. If your goal is to update the
> contents of a column, you need to assign something to that column in the
> next line. Instead you assign it to the object named "t".
>
> What you're looking for will be more along the lines of this:
>
>     for (i in 1:10){
>       nm <- paste0("V", i)
>       d0[[nm]] <- ifelse( regexpr(d1[i,1], d0$X0) > 0, 1, 0)
>     }
>
> This may not a complete solution, since I have no idea what the contents
> or structure of d1 are, or what the regexpr() is expected to return.
>
> And notice the use of double brackets, [[ and ]]. This is one way to
> reference a column of a  data frame when you have the column's name stored
> in a variable. Another way is d0[ , nm]
>
>
> A couple of additional comments:
>
>  "t" is a poor choice of object name, because it is one of R's built-in
> functions (immediately after starting a fresh session of R, with nothing
> left over from any previous session, type help("r") and see what you get).
>
>  ifelse() is intended for use on vectors, not scalars, and it looks like
> maybe you're using it on a scalar (can't be sure about this, though)
>
> For example, ifelse() is designed for this kind of usage:
> > ifelse( c(TRUE, FALSE, TRUE) , 1:3, 11:13)
> [1]  1 12  3
>
> Although it works ok for these
> > ifelse(TRUE, 3, 4)
> [1] 3
> > ifelse(FALSE, 3, 4)
> [1] 4
> They are not really what it is intended for.
>
> --
> Don MacQueen
> Lawrence Livermore National Laboratory
> 7000 East Ave., L-627
> Livermore, CA 94550
> 925-423-1062
> Lab cell 925-724-7509
>
>
> On 4/24/18, 12:30 AM, "R-help on behalf of Luca Meyer" <
> r-help-bounces using r-project.org on behalf of lucam1968 using gmail.com> wrote:
>
>     Hi,
>
>     I am trying to debug the following code:
>
>     for (i in 1:10){
>       t <- paste("d0$V",i,sep="")
>       t <- ifelse(regexpr(d1[i,1],d0$X0)>0,1,0)
>     }
>
>     and I would like to see what code is actually processing R, how can I
> do
>     that?
>
>     More to the point, I am trying to update my variables d0$V1 to d0$V10
>     according to the presence or absence of some text (contained in the
> file
>     d1) within the d0$X0 variable.
>
>     The code seem to run ok, if I add print(table(t)) within the loop I
> can see
>     that the ifelse procedure is working and to some cases within the
> d0$V1 to
>     d0$V10 variable range a 1 is assigned. But when checking my d0$V1 to
> d0$V10
>     after the for loop they are all still equal to zero...
>
>     Thanks,
>
>     Luca
>
>         [[alternative HTML version deleted]]
>
>     ______________________________________________
>     R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>     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]]




More information about the R-help mailing list