<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Arun, thanks for the clarification -- I see I didn't read that
    thread fully.<br>
    --Mel.<br>
    <br>
    <div class="moz-cite-prefix">On 2/14/2014 7:07 AM, Arunkumar
      Srinivasan wrote:<br>
    </div>
    <blockquote
      cite="mid:etPan.52fe071e.1dbabf00.ef94@Arunkumars-MacBook-Pro.local"
      type="cite">
      <style>body{font-family:Helvetica,Arial;font-size:13px}</style>
      <div id="bloop_customfont"
        style="font-family:Helvetica,Arial;font-size:13px; color:
        rgba(0,0,0,1.0); margin: 0px; line-height: auto;">Melanie,</div>
      <div id="bloop_customfont"
        style="font-family:Helvetica,Arial;font-size:13px; color:
        rgba(0,0,0,1.0); margin: 0px; line-height: auto;">`set` modifies
        by reference. Yours'll make a copy. </div>
      <div id="bloop_sign_1392379623481940992" class="bloop_sign">
        <div style="font-family:helvetica,arial;font-size:13px">Arun</div>
      </div>
      <div style="color:gray">
        <hr style="style:linear">From: <span style="color:black">Bacou,
          Melanie</span> <a moz-do-not-send="true"
          href="mailto:mel@mbacou.com">Bacou, Melanie</a><br>
        Reply: <span style="color:black">Bacou, Melanie</span> <a
          moz-do-not-send="true" href="mailto:mel@mbacou.com">mel@mbacou.com</a><br>
        Date: <span style="color:black">February 14, 2014 at 12:52:56 PM</span><br>
        To: <span style="color:black">Matt Dowle</span> <a
          moz-do-not-send="true" href="mailto:mdowle@mdowle.plus.com">mdowle@mdowle.plus.com</a>,
        <span style="color:black">John Laing</span> <a
          moz-do-not-send="true" href="mailto:john.laing@gmail.com">john.laing@gmail.com</a><br>
        Subject: <span style="color:black"> Re: [datatable-help] Force
          evaluation of first argument to [ <br>
        </span></div>
      <blockquote type="cite" class="clean_bq"><span>
          <div bgcolor="#FFFFFF" text="#000000">
            <div>
              <title></title>
              Hi John, Matt,<br>
              <br>
              In this case, why not simply using the standard data.table
              approach
              with .SD?<br>
              <br>
              <tt>fbq.cp[, lapply(.SD, function(x) ifelse(is.na(x),
                FALSE, x)),
                .SDcols=c("foo", "bar", "qux")]</tt><br>
              <br>
              --Mel.<br>
              <br>
              <br>
              <div class="moz-cite-prefix">On 2/12/2014 2:22 PM, Matt
                Dowle
                wrote:<br>
              </div>
              <blockquote cite="mid:52FBC9DC.2010809@mdowle.plus.com"
                type="cite">
                <div class="moz-cite-prefix"><br>
                  Ha.  Yes we certainly don't hold back from making the
                  messages
                  as long and as helpful as possible.  If the code
                  knows, or can
                  know what exactly is wrong, it's a deliberate policy
                  to put that
                  info right there into the message. data.table is
                  written by users;
                  i.e. we wrote it for ourselves doing real jobs. I
                  think that may be
                  the root of that.  If any messages could more
                  helpful, 
                  those suggestions are very welcome.<br>
                  <br>
                  Matt<br>
                  <br>
                  On 12/02/14 17:58, John Laing wrote:<br>
                </div>
                <blockquote
cite="mid:CAA3Wa=u2PwRW_Od4XTodtZ4uDSN7RZmOs33Uaaix8GN7OuRpag@mail.gmail.com"
                  type="cite">
                  <div dir="ltr">Thanks, Matt! With a slight amendment
                    that works
                    great:
                    <div>
                      <div>for (x in c("foo", "bar", "qux")) set(fbq,
                        which(<a moz-do-not-send="true"
                          href="http://is.na">is.na</a>(fbq[[x]])), x,
                        FALSE)</div>
                    </div>
                    <div><br>
                    </div>
                    <div>Which highlights an opportunity to say that I
                      really
                      appreciate the unusually helpful error messages in
                      this
                      package.</div>
                    <div><br>
                    </div>
                    <div>-John</div>
                  </div>
                  <div class="gmail_extra"><br>
                    <br>
                    <div class="gmail_quote">On Wed, Feb 12, 2014 at
                      12:44 PM, Matt
                      Dowle <span dir="ltr"><<a
                          moz-do-not-send="true"
                          href="mailto:mdowle@mdowle.plus.com"
                          target="_blank">mdowle@mdowle.plus.com</a>></span>
                      wrote:<br>
                      <blockquote class="gmail_quote" style="margin:0 0
                        0 .8ex;border-left:1px #ccc
                        solid;padding-left:1ex">
                        <div bgcolor="#FFFFFF" text="#000000">
                          <div><br>
                            Hi John,<br>
                            <br>
                            In examples like this I'd use set() and [[, 
                            since it's a bit
                            easier to write but memory efficient too.<br>
                            <br>
                            for (x in c("foo", "bar", "qux"))   set(fbq,
                            <a moz-do-not-send="true"
                              href="http://is.na" target="_blank">is.na</a>(fbq[[x]]),
                            x,
                            FALSE)          
                            [untested]<br>
                            <br>
                            A downside here is one repetition of the
                            "fbq" symbol,  but
                            can live with that.  If you have a large
                            number of
                            columns  (and I've been surprised just how
                            many columns some
                            poeple have!) then calling set() many times
                            has lower overhead than
                            DT[, :=],  see ?set.   Note also that [[ is
                            base R,
                            doesn't copy the column and often useful to
                            use with
                            data.table.<br>
                            <br>
                            Or, use get() in either i or j rather than
                            eval().<br>
                            <br>
                            HTH, Matt
                            <div>
                              <div class="h5"><br>
                                <br>
                                <br>
                                On 12/02/14 17:24, John Laing wrote:<br>
                              </div>
                            </div>
                          </div>
                          <blockquote type="cite">
                            <div>
                              <div class="h5">
                                <div dir="ltr">Let's say I merge
                                  together several data.tables such
                                  that I wind up<br>
                                  with lots of NAs:<br>
                                  <br>
                                  require(data.table)<br>
                                  foo <- data.table(k=1:4, foo=TRUE,
                                  key="k")<br>
                                  bar <- data.table(k=3:6, bar=TRUE,
                                  key="k")<br>
                                  qux <- data.table(k=5:8, qux=TRUE,
                                  key="k")<br>
                                  fbq <- merge(merge(foo, bar,
                                  all=TRUE), qux, all=TRUE)<br>
                                  print(fbq)<br>
                                  #    k  foo  bar  qux<br>
                                  # 1: 1 TRUE   NA   NA<br>
                                  # 2: 2 TRUE   NA   NA<br>
                                  # 3: 3 TRUE TRUE   NA<br>
                                  # 4: 4 TRUE TRUE   NA<br>
                                  # 5: 5   NA TRUE TRUE<br>
                                  # 6: 6   NA TRUE TRUE<br>
                                  # 7: 7   NA   NA TRUE<br>
                                  # 8: 8   NA   NA TRUE<br>
                                  <br>
                                  I want to go through those columns and
                                  turn each NA into FALSE. I
                                  can<br>
                                  do this by writing code for each
                                  column:<br>
                                  <br>
                                  fbq.cp <- copy(fbq)<br>
                                  fbq.cp[<a moz-do-not-send="true"
                                    href="http://is.na" target="_blank">is.na</a>(foo),
                                  foo:=FALSE]<br>
                                  fbq.cp[<a moz-do-not-send="true"
                                    href="http://is.na" target="_blank">is.na</a>(bar),
                                  bar:=FALSE]<br>
                                  fbq.cp[<a moz-do-not-send="true"
                                    href="http://is.na" target="_blank">is.na</a>(qux),
                                  qux:=FALSE]<br>
                                  print(fbq.cp)<br>
                                  #    k   foo   bar   qux<br>
                                  # 1: 1  TRUE FALSE FALSE<br>
                                  # 2: 2  TRUE FALSE FALSE<br>
                                  # 3: 3  TRUE  TRUE FALSE<br>
                                  # 4: 4  TRUE  TRUE FALSE<br>
                                  # 5: 5 FALSE  TRUE  TRUE<br>
                                  # 6: 6 FALSE  TRUE  TRUE<br>
                                  # 7: 7 FALSE FALSE  TRUE<br>
                                  # 8: 8 FALSE FALSE  TRUE<br>
                                  <br>
                                  But I can't figure out how to do it in
                                  a loop. More precisely, I
                                  can't<br>
                                  figure out how to make the [ operator
                                  evaluate its first argument
                                  in<br>
                                  the context of the data.table. All of
                                  these have no effect:<br>
                                  for (x in c("foo", "bar", "qux")) fbq[<a
                                    moz-do-not-send="true"
                                    href="http://is.na" target="_blank">is.na</a>(x),
                                  eval(x):=FALSE]<br>
                                  for (x in c("foo", "bar", "qux")) fbq[<a
                                    moz-do-not-send="true"
                                    href="http://is.na" target="_blank">is.na</a>(eval(x)),
                                  eval(x):=FALSE]<br>
                                  for (x in c("foo", "bar", "qux"))
                                  fbq[eval(<a moz-do-not-send="true"
                                    href="http://is.na" target="_blank">is.na</a>(x)),
                                  eval(x):=FALSE]<br>
                                  <br>
                                  I'm running R 3.0.2 on Linux,
                                  data.table 1.8.10.<br>
                                  <br>
                                  Thanks in advance,<br>
                                  John</div>
                                <br>
                                <br>
                              </div>
                            </div>
                            <pre>_______________________________________________
datatable-help mailing list
<a moz-do-not-send="true" href="mailto:datatable-help@lists.r-forge.r-project.org" target="_blank">datatable-help@lists.r-forge.r-project.org</a>
<a moz-do-not-send="true" href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help</a>
</pre>
                          </blockquote>
                          <br>
                        </div>
                      </blockquote>
                    </div>
                    <br>
                  </div>
                </blockquote>
                <br>
                <br>
                <fieldset class="mimeAttachmentHeader"></fieldset>
                <br>
                <pre wrap="">_______________________________________________
datatable-help mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:datatable-help@lists.r-forge.r-project.org">datatable-help@lists.r-forge.r-project.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext" href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help</a>
</pre>
              </blockquote>
              <br>
              <pre class="moz-signature" cols="72">--  
Melanie BACOU
International Food Policy Research Institute
Agricultural Economist, HarvestChoice
Work +1(202)862-5699
E-mail <a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:mel@mbacou.com">mel@mbacou.com</a>
Visit harvestchoice.org  
</pre>
              _______________________________________________
              <br>
              datatable-help mailing list
              <br>
              <a class="moz-txt-link-abbreviated" href="mailto:datatable-help@lists.r-forge.r-project.org">datatable-help@lists.r-forge.r-project.org</a>
              <br>
<a class="moz-txt-link-freetext" href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help</a></div>
          </div>
        </span></blockquote>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Melanie BACOU
International Food Policy Research Institute
Agricultural Economist, HarvestChoice
Work +1(202)862-5699
E-mail <a class="moz-txt-link-abbreviated" href="mailto:mel@mbacou.com">mel@mbacou.com</a>
Visit harvestchoice.org </pre>
  </body>
</html>