[datatable-help] Avoiding print when using := ?

Matthew Dowle mdowle at mdowle.plus.com
Fri Sep 14 14:33:58 CEST 2012


Hi Steve,

Your commits are fantastic! Yes just feel free to go ahead and make
progress, no need to check with me first.

On `history` and `interactive()`, yes great idea. I had been trying to
suppress the print method from being called after a :=, but couldn't do it
for the reasons in faq 2.22 as you know. Letting the print method run but
switching inside it hadn't crossed my mind.

How about setting an internal global "noprint" flag in :=, so the print
method still runs afterwards but does nothing when noprint is on (other
than than set it back to off). Problem with that is that the print method
might not run (e.g. when := is inside a function) which could mean the
next time you type "DT" at the prompt, or even "print(DT)" nothing happens
and you have to type it again. Which isn't desirable. Is there a way to
know inside := inside [.data.table _if_ the output will be printed?  If
the parent.env() is .GlobalEnv, or something perhaps? Then only if it is
would := set the noprint flag on.

Or yes the `history()` way sounds cleaner than having a global flag. Then
it would self contained within print.data.table.

Matthew



> While taking my dog for a walk, though, I was wondering if we couldn't
> hijack the `history` mechanism in the `print.data.table` function to
> do this "better".
>
> We might first check `if (interactive())`, then see if the last call
> involved `:=`, in which case we could just silence the print ... just
> a thought.
>
> -steve
>
> On Fri, Sep 14, 2012 at 7:22 AM, Steve Lianoglou
> <mailinglist.honeypot at gmail.com> wrote:
>> Hi,
>>
>> On Fri, Sep 14, 2012 at 1:56 AM, Allan Engelhardt (CYBAEA)
>> <allane at cybaea.com> wrote:
>>> On 13/09/12 23:42, Steve Lianoglou wrote:
>>>>
>>>> Perhaps the `nrows` param in print.data.table should be user
>>>> configurable by some `option`, maybe something like:
>>>>
>>>> print.data.table <- function(x,
>>>> nrows=getOption('datatable.print.nrows', 100), ...) { ... }
>>>>
>>>> Then you could `options(datatable.print.nrows=20)` if 100 is too high
>>>> ...
>>>>
>>>> Maybe?
>>>>
>>>> -steve
>>>
>>>
>>> I really like this suggestion. You could perhaps even set it to 0
>>> temporarily while you were doing lots of := work. Do you want to raise
>>> a
>>> feature request Steve?
>>
>> I just committed code to SVN to support this. In short there are two
>> new `options` one can set to customize the amount of a data.table
>> summariazed to the console (these can always be sidestepped by calling
>> `print(dt)` directly).
>>
>> The options are:
>>
>> * datatable.print.nrows : When the data.table has more than this
>> number (defaults to 100) the `---` summary stuff is triggered. If this
>> is set to 0, no data.table will be printed to the console unless you
>> call `print(your.data.table, ...)`
>>
>> * datatable.print.topn : When a summary is triggered during printing,
>> this number show the top and bottom `topn` rows (defaults to 10)
>>
>> FAQs 2.11 and 2.22 to show you how you might use it, but in short:
>>
>> R> library(data.table)
>> R> dt = data.table(a=letters[1:10], b=rnorm(10))
>> R> options(datatable.print.nrows=8)
>> R> dt
>>     a          b
>>  1: a -1.1423662
>>  2: b  0.2878413
>> ---
>>  9: i -0.1247109
>> 10: j -0.6932983
>>
>> R> dt[, something := rnorm(10)]
>>     a          b    something
>>  1: a -1.1423662  0.700697859
>>  2: b  0.2878413 -0.007995077
>> ---
>>  9: i -0.1247109  0.060807862
>> 10: j -0.6932983 -0.796266433
>>
>> R> options(datatable.print.nrows=0)
>> R> dt[, another := runif(10)]
>> R> print(dt, 100)
>>     a          b    something   another
>>  1: a -1.1423662  0.700697859 0.3831220
>>  2: b  0.2878413 -0.007995077 0.3894803
>>  3: c -0.9657560 -0.511566173 0.1208057
>>  4: d -0.1065197  0.685830341 0.2878074
>>  5: e -0.7630674 -0.161960447 0.3378524
>>  6: f -1.1561141  0.464995932 0.2487832
>>  7: g  0.2408447 -0.175998144 0.8600236
>>  8: h -0.4386328  1.002378381 0.7682450
>>  9: i -0.1247109  0.060807862 0.1635926
>> 10: j -0.6932983 -0.796266433 0.4739380
>>
>> The caveat is that I didn't check in with Matthew to see if he's OK
>> with this, so unless he objects ... there it is. It is in SVN now (at
>> r-forge), and you can grab it from there and install. If you aren't
>> setup to do that, you will have to wait for 1.8.3 to release.
>>
>> The other thing is that this really doesn't address the `:=` printing
>> behavior specifically, so not sure how helpful this is in the long run
>> unless you don't mind calling `print` to view things explicitly.
>>
>> HTH,
>> -steve
>>
>> --
>> Steve Lianoglou
>> Graduate Student: Computational Systems Biology
>>  | Memorial Sloan-Kettering Cancer Center
>>  | Weill Medical College of Cornell University
>> Contact Info: http://cbio.mskcc.org/~lianos/contact
>
>
>
> --
> Steve Lianoglou
> Graduate Student: Computational Systems Biology
>  | Memorial Sloan-Kettering Cancer Center
>  | Weill Medical College of Cornell University
> Contact Info: http://cbio.mskcc.org/~lianos/contact
> _______________________________________________
> datatable-help mailing list
> datatable-help at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help
>




More information about the datatable-help mailing list