<br><br><div class="gmail_quote">On Fri, Jun 24, 2011 at 8:06 AM, Robert Kern <span dir="ltr">&lt;<a href="mailto:robert.kern@gmail.com">robert.kern@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div></div><div class="h5">On Fri, Jun 24, 2011 at 07:30, Laurent Gautier &lt;<a href="mailto:lgautier@gmail.com">lgautier@gmail.com</a>&gt; wrote:<br>
&gt; On 2011-06-24 13:59,  Nathaniel Smith &lt;<a href="mailto:njs@pobox.com">njs@pobox.com</a>&gt; wrote:<br>
&gt;&gt; On Thu, Jun 23, 2011 at 5:56 PM, Benjamin Root&lt;<a href="mailto:ben.root@ou.edu">ben.root@ou.edu</a>&gt;  wrote:<br>
&gt;&gt;&gt; Lastly, I am not entirely familiar with R, so I am also very curious about<br>
&gt;&gt;&gt; what this magical &quot;NA&quot; value is, and how it compares to how NaNs work.<br>
&gt;&gt;&gt; Although, Pierre brought up the very good point that NaNs woulldn&#39;t work<br>
&gt;&gt;&gt; anyway with integer arrays (and object arrays, etc.).<br>
&gt;&gt; Since R is designed for statistics, they made the interesting decision<br>
&gt;&gt; that *all* of their core types have a special designated &quot;missing&quot;<br>
&gt;&gt; value. At the R level this is just called &quot;NA&quot;. Internally, there are<br>
&gt;&gt; a bunch of different NA values -- for floats it&#39;s a particular NaN,<br>
&gt;&gt; for integers it&#39;s INT_MIN, for booleans it&#39;s 2 (IIRC), etc. (You never<br>
&gt;&gt; notice this, because R will silently cast a NA of one type into NA of<br>
&gt;&gt; another type whenever needed, and they all print the same.)<br>
&gt;&gt;<br>
&gt;&gt; Because any array can contain NA&#39;s, all R functions then have to have<br>
&gt;&gt; some way of handling this -- all their integer arithmetic knows that<br>
&gt;&gt; INT_MIN is special, for instance. The rules are basically the same as<br>
&gt;&gt; for NaN&#39;s, but NA and NaN are different from each other (because one<br>
&gt;&gt; means &quot;I don&#39;t know, could be anything&quot; and the other means &quot;you tried<br>
&gt;&gt; to divide by 0, I *know* that&#39;s meaningless&quot;).<br>
&gt;&gt;<br>
&gt;&gt; That&#39;s basically it.<br>
&gt;&gt;<br>
&gt;&gt; -- Nathaniel<br>
&gt;<br>
&gt; Would the use of R&#39;s system for expressing &quot;missing values&quot; be possible<br>
&gt; in numpy through a special flag ?<br>
&gt;<br>
&gt; Any given numpy array could have a boolean flag (say &quot;na_aware&quot;)<br>
&gt; indicating that some of the values are representing a missing cell.<br>
&gt;<br>
&gt; If the exact same system is used, interaction with R (through something<br>
&gt; like rpy2) would be simplified and more robust.<br>
<br>
</div></div>The alternative proposal would be to add a few new dtypes that are<br>
NA-aware. E.g. an nafloat64 would reserve a particular NaN value<br>
(there are lots of different NaN bit patterns, we&#39;d just reserve one)<br>
that would represent NA. An naint32 would probably reserve the most<br>
negative int32 value (like R does). Using the NA-aware dtypes signals<br>
that you are using NA values; there is no need for an additional flag.<br>
<div class="im"><br></div></blockquote><div><br>Definitely better names than r-int32. Going this way has the advantage of reducing the friction between R and numpy, and since R has pretty much become the standard software for statistics that is an important consideration.<br>
<br>Chuck <br></div><br></div>