Data.table: [R-Forge #5580] invisible functions become visible in the j-expression

Created on 8 Jun 2014  ·  8Comments  ·  Source: Rdatatable/data.table

Submitted by: Eduard Antonyan; Assigned to: Nobody; R-Forge link

fn = function() {invisible(1:5)}

dt[, fn()]
# [1] 1 2 3 4 5

This is pretty annoying when using e.g. boxplot.

bug wontfix

Most helpful comment

No it is because R internally forces visibility on [ unlike with(). See FAQ 2.22.

All 8 comments

@eantonya could you provide an example usage with boxplot?

The problem here is very much related to :=, as explained in FAQ 2.22.

The best we can do is to return invisibly _iff_ fn() returns a data.table. Else, we'll have to modify _all_ the print methods the same way how does cleverly using .global$print.

I've added the label 'won't fix' for now. As it's a problem with the way base R forces visibility on [. If you agree, we can close this as such (unless there's an alternative we can come up with).

Tagging @mattdowle as well.

I think this may be identical to #1471. Just found this.

It's too bad R doesn't return something with an "invisible" attribute when it is the result of invisible. That would make this easy.

Linking back to which links here. We could revisit FAQ 2.18 (the solution there didn't work for me when I just tested it) as well as 2.22 and over a year has passed since we last looked so another attempt may be due.

Hmm. Just noticed that with(dt, fn()) _doesn't_ print the output. I guess this is related to the whole .global$print issue more than anything, then.

No it is because R internally forces visibility on [ unlike with(). See FAQ 2.22.

Can't the same global print suppression that works with := work here?

as per Arun comment, we cannot do much about R's [ forcing visibility, solution is to wrap your data.table expression into invisible.

Was this page helpful?
0 / 5 - 0 ratings