<div>Hi Matthew,</div><div>My view (from the last reply) more or less reflects mnel's comments here: http://stackoverflow.com/questions/16239153/dtx-and-dtx-treat-na-in-x-inconsistently#comment23317096_16240143 </div>
                <div><div><br></div><div>Pasted here for convenience:</div><div><span class="comment-copy" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(250, 250, 250); color: rgb(68, 68, 68); font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; line-height: 17px; text-align: left; "><code style="margin: 0px; padding: 1px 5px; border: 0px; vertical-align: baseline; background-color: rgb(238, 238, 238); font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; ">data.table</code> is mimicing <code style="margin: 0px; padding: 1px 5px; border: 0px; vertical-align: baseline; background-color: rgb(238, 238, 238); font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; ">subset</code> in its handling of <code style="margin: 0px; padding: 1px 5px; border: 0px; vertical-align: baseline; background-color: rgb(238, 238, 238); font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; ">NA</code> values in logical <code style="margin: 0px; padding: 1px 5px; border: 0px; vertical-align: baseline; background-color: rgb(238, 238, 238); font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; ">i</code> arguments. -- the only issue is the <code style="margin: 0px; padding: 1px 5px; border: 0px; vertical-align: baseline; background-color: rgb(238, 238, 238); font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; ">!</code> prefix signifying a not-join, not the way one might expect. Perhaps the not join prefix could have been <code style="margin: 0px; padding: 1px 5px; border: 0px; vertical-align: baseline; background-color: rgb(238, 238, 238); font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; ">NJ</code> not <code style="margin: 0px; padding: 1px 5px; border: 0px; vertical-align: baseline; background-color: rgb(238, 238, 238); font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; ">!</code> to avoid this confusion -- this might be another discussion to have on the mailing list -- (I think it is a discussion worth having)</span><span style="color: rgb(68, 68, 68); font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; line-height: 17px; text-align: left; background-color: rgb(250, 250, 250); "> </span></div><div><span style="color: rgb(68, 68, 68); font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; line-height: 17px; text-align: left; background-color: rgb(250, 250, 250); "><br></span></div><div>Arun</div><div><br></div></div>
                 
                <p style="color: #A0A0A8;">On Monday, June 10, 2013 at 10:28 AM, Arunkumar Srinivasan wrote:</p>
                <blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;">
                    <span><div><div><blockquote type="cite"><div><span><p>Hm, good point.  Is data.table consistent with SQL already, for both == and !=, and so no change needed?  </p></span></div></blockquote><div>Yes, I believe it's already consistent with SQL. However, the current interpretation of NA (documentation) being treated as FALSE is not needed / untrue, imho (Please see below).</div><div> </div><blockquote type="cite"><div><span><p>And it was correct for Frank to be mistaken.  </p></span></div></blockquote><div>Yes, it seems like he was mistaken.</div><blockquote type="cite"><div><span><p>Maybe just some more documentation and examples needed then.</p></span></div></blockquote><div>It'd be much more appropriate if the documentation reflects the role of subsetting in data.table mimicking "subset" function (in order to be in line with SQL) by dropping NA evaluated logicals. From a couple of posts before, where I pasted the code where NAs are replaced to FALSE were not necessary as `irows <- which(i)` makes clear that `which` is being used to get indices and then subset, this fits perfectly well with the interpretation of NA in data.table. </div><blockquote type="cite"><div><span><p>Are you happy that DT[!(x==.)] and DT[x!=.] do treat NA inconsistently? :</p>
<p><a href="http://stackoverflow.com/questions/16239153/dtx-and-dtx-treat-na-in-x-inconsistently">http://stackoverflow.com/questions/16239153/dtx-and-dtx-treat-na-in-x-inconsistently</a></p></span></div></blockquote><div> Ha, I like the idea behind the use of () in evaluating expressions. It's another nice layer towards simplicity in data.table. But I still think there should not be an inconsistency in equivalent logical operations to provide different results. If !(x== .) and x != . are indeed different, then I'd suppose replacing `!` with a more appropriate name as it's much easier to get confused otherwise. </div><div><br></div><div>In essence, either !(x == .) must evaluate to (x != .) if the underlying meaning of these are the same, or the `!` in `!(x==.)` must be replaced to something that's more appropriate for what it's supposed to be. Personally, I prefer the former. It would greatly tighten the structure and consistency.</div><blockquote type="cite"><div><span>
<p>"na.rm = TRUE/FALSE" sounds good to me.  I'd only considered nomatch before in the context of joins, not logical subsets.</p></span></div></blockquote><div>Yes, I find this option would give more control in evaluating expressions with ease in `i`, by providing both "subset" (default) and the typical data.frame subsetting (na.rm = FALSE).</div><div><br></div><div>Best regards,</div><div> </div><div><div>Arun</div><div><br></div>
                </div>
            </div></div></span>
                 
                 
                 
                 
                </blockquote>
                 
                <div>
                    <br>
                </div>