<div dir="ltr">Steve, great stuff!! <div>thanks for making that happen<div class="gmail_extra"><div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)"><div style="font-size:13px">
<a href="mailto:saporta@rutgers.edu" style="color:rgb(17,85,204);font-size:13px" target="_blank"></a></div><div><br></div><div>Rick</div></div></div>
<br><br><div class="gmail_quote">On Wed, Aug 14, 2013 at 8:30 PM, Steve Lianoglou <span dir="ltr"><<a href="mailto:mailinglist.honeypot@gmail.com" target="_blank">mailinglist.honeypot@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi all,<br>
<br>
As I needed this sooner than I had expected, I just committed this<br>
change. It's in svn revision 889.<br>
<br>
I chose 'by.columns' as the parameter names -- seemed to make more<br>
sense to me, and using the short hand interactively saves a letter,<br>
eg: unique(dt, by=c('some', 'columns')) ;-)<br>
<br>
Here's the note from the NEWS file:<br>
<br>
o  "Uniqueness" tests can now specify arbirtray combinations of<br>
columns to use to test for duplicates. `by.columns` parameter added to<br>
unique.data.table and duplicated.data.table. This allows the user to<br>
test for uniqueness using any combination of columns in the<br>
data.table, where previously the user only had the option to use the<br>
keyed columns (if keyed) or all columns (if not). The default behavior<br>
sets `by.columns=key(dt)` to maintain backward compatability. See<br>
man/duplicated.Rd and tests 986:991 for more information. Thanks to<br>
Arunkumar Srinivasan, Ricardo Saporta, and Frank Erickson for useful<br>
discussions.<br>
<br>
Should work as advertised assuming my unit tests weren't too simplistic.<br>
<br>
Cheers,<br>
<br>
-steve<br>
<br>
<br>
<br>
<br>
On Tue, Aug 13, 2013 at 1:24 PM, Steve Lianoglou<br>
<div class="HOEnZb"><div class="h5"><<a href="mailto:mailinglist.honeypot@gmail.com">mailinglist.honeypot@gmail.com</a>> wrote:<br>
> Thanks for the suggestions, folks.<br>
><br>
> Matthew: do you have a preference?<br>
><br>
> -steve<br>
><br>
> On Mon, Aug 12, 2013 at 11:12 AM, Ricardo Saporta<br>
> <<a href="mailto:saporta@scarletmail.rutgers.edu">saporta@scarletmail.rutgers.edu</a>> wrote:<br>
>> Steve,<br>
>><br>
>> I like your suggestion a lot.  I can see putting column specification to<br>
>> good use.<br>
>><br>
>> As for the argument name, perhaps<br>
>>    'use.columns'<br>
>><br>
>> And where a value of NULL or FALSE will yield same results as<br>
>> `unique.data.frame`<br>
>><br>
>>     use.columns=key(x)   # default behavior<br>
>>     use.columns=c("col1name", "col7name")   #etc<br>
>>     use.columns=NULL<br>
>><br>
>><br>
>> Thanks as always,<br>
>> Rick<br>
>><br>
>><br>
>><br>
>> On Mon, Aug 12, 2013 at 1:51 PM, Steve Lianoglou<br>
>> <<a href="mailto:mailinglist.honeypot@gmail.com">mailinglist.honeypot@gmail.com</a>> wrote:<br>
>>><br>
>>> Hi folks,<br>
>>><br>
>>> I actually want to revisit the fix I made here.<br>
>>><br>
>>> Instead of having `use.key` in the signature to unique.data.table (and<br>
>>> duplicated.data.table) to be:<br>
>>><br>
>>> function(x,<br>
>>>              incomparables=FALSE,<br>
>>>              tolerance=.Machine$double.eps ^ 0.5,<br>
>>>              use.key=TRUE, ...)<br>
>>><br>
>>> How about we switch out use.key for a parameter that specifies the<br>
>>> column names to use in the uniqueness check, which defaults to key(x)<br>
>>> to keep backwards compatibility.<br>
>>><br>
>>> For argument's sake (like that?), lets call this parameter `columns`<br>
>>> (by.columns? with.columns? whatever) so:<br>
>>><br>
>>> function(x,<br>
>>>              incomparables=FALSE,<br>
>>>              tolerance=.Machine$double.eps ^ 0.5,<br>
>>>              columns=key(x), ...)<br>
>>><br>
>>> Then:<br>
>>><br>
>>> (1) leaving it alone is the backward compatibile behavior;<br>
>>> (2) Perhaps setting it to NULL will use all columns, and make it<br>
>>> equivalent to unique.data.frame (also the same when x has no key); and<br>
>>> (3) setting it to any other combo of columns uses those columns as the<br>
>>> uniqueness key and filters the rows (only) out of x accordingly.<br>
>>><br>
>>> What do you folks think? Personally I think this is better on all<br>
>>> accounts then just specifying to use the key or not and the only<br>
>>> question in my mind is the name of the argument -- happy to hear other<br>
>>> world views, however, so don't be shy.<br>
>>><br>
>>> Thanks,<br>
>>> -steve<br>
>>><br>
>>> --<br>
>>> Steve Lianoglou<br>
>>> Computational Biologist<br>
>>> Bioinformatics and Computational Biology<br>
>>> Genentech<br>
>><br>
>><br>
><br>
><br>
><br>
> --<br>
> Steve Lianoglou<br>
> Computational Biologist<br>
> Bioinformatics and Computational Biology<br>
> Genentech<br>
<br>
<br>
<br>
--<br>
Steve Lianoglou<br>
Computational Biologist<br>
Bioinformatics and Computational Biology<br>
Genentech<br>
</div></div></blockquote></div><br></div></div></div>