r - `print(x)` not giving same output as `x` -


at r console, expected print(x) give same output x. had assumed print used console printing everything. there null here print:

library(data.table)  print(data.table(1)[0]) # empty data.table (0 rows) of 1 col: v1 # null                                          # why 'null' printed here?  data.table(1)[0] # empty data.table (0 rows) of 1 col: v1                                               # .. no 'null' here? 

this sample data created data.table package, think general question still applies when not using data.table: function/method used print return values @ console?

# r --vanilla  # r version 3.2.3 

update :

the fix has been merged in v1.10.5. michael chirico.

after running:

install.packages('data.table', type = 'source',                  repos = 'http://rdatatable.github.io/data.table') 

it work expected:

library(data.table) # data.table 1.10.5 in development built 2017-05-18 00:04:56 utc; travis #   fastest way learn (by data.table authors):  https://www.datacamp.com/courses/data-analysis-the-data-table-way #   documentation: ?data.table, example(data.table) ,  browsevignettes("data.table") #   release notes, videos , slides: http://r-datatable.com  print(data.table(1)[0]) # empty data.table (0 rows) of 1 col: v1  data.table(1)[0] # empty data.table (0 rows) of 1 col: v1 

it might because print method data.table doing wrong thing. print methods expected return invisibly. suspect data.table:::print.data.table returning visibly.

(update: i've submitted a bug report data.table. apologies them if i've analyzed incorrectly! )

from ?print:

‘print’ prints argument , returns invisibly (via ‘invisible(x)’).

here tiny demo of might happening:

> x=list() > class(x) <- 'x' > print.x <- function(x) { print("i printing"); return(1729); } > x [1] "i printing" > print(x) [1] "i printing" [1] 1729 

note how typing x on own prints text, no number. typing print(x) causes number printed also.

then, if arrange print method return invisibly follows:

> print.x <- function(x) { print("i printing"); return(invisible(1729)); } 

.. print(x) gives expected output

> print(x) [1] "i printing" 

so, when type x @ console, console call print on behalf , ignores return value print (which may visible). if type print(x), return value of print printed if visible.


the ?print documentation bit misleading think. print methods supposed return argument , supposed invisibly, these rules not enforced


Comments

Popular posts from this blog

angular - Is it possible to get native element for formControl? -

unity3d - Rotate an object to face an opposite direction -

javascript - Why jQuery Select box change event is now working? -