Aktualizacja:
Rozwiązaniem właśnie zostały scalone w v1.10.5. Podziękowania dla Michaela Chirico.
po uruchomieniu:
install.packages('data.table', type = 'source',
repos = 'http://Rdatatable.github.io/data.table')
To będzie działać zgodnie z oczekiwaniami:
library(data.table)
# data.table 1.10.5 IN DEVELOPMENT built 2017-05-18 00:04:56 UTC; travis
# The fastest way to learn (by data.table authors): https://www.datacamp.com/courses/data-analysis-the-data-table-way
# Documentation: ?data.table, example(data.table) and browseVignettes("data.table")
# Release notes, videos and 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
To może być fakt, że metoda print
dla data.table
robi coś złego. Oczekuje się, że metody drukowania zwrócą niewidoczny .Ale podejrzewam, że data.table:::print.data.table
zwraca widocznie.
(Update: Właśnie składać a bug report to data.table przeprosiny nich gdybym Zbadaliśmy to nieprawidłowo.!)
Od ?print
:
'drukuj' drukuje swój argument i zwraca go niewidoczny (przez "niewidzialny (x)").
Oto mały pokaz tego, co może się dziać:
> x=list()
> class(x) <- 'X'
> print.X <- function(x) { print("I am printing"); return(1729); }
> x
[1] "I am printing"
> print(x)
[1] "I am printing"
[1] 1729
Uwaga jak wpisując x
na własną rękę po prostu drukuje tekst, ale nie ilość. Ale wpisanie numeru print(x)
powoduje również wydrukowanie numeru.
Następnie, jeśli zorganizować ta metoda druku, aby powrócić niewidocznie następująco:
> print.X <- function(x) { print("I am printing"); return(invisible(1729)); }
.. następnie print(x)
daje oczekiwany wynik
> print(x)
[1] "I am printing"
Więc, po wpisaniu w x
konsola, konsola wywołuje w twoim imieniu print
i ignoruje wartość zwracaną z print
(która może być widoczna). Ale jeśli wpiszesz print(x)
, to zwrócona wartość print
zostanie wydrukowana, jeśli jest widoczna.
Dokumentacja jest nieco myląca. print
metody są rzekomą aby powrócić swoje argumenty i są powinien zrobić tak niewidzialnie, ale te zasady nie są egzekwowane
Proszę zgłosić to jako błąd na github. – eddi
Robiąc to teraz @eddi. Miałeś na myśli raport o błędzie z 'data.table' dla ich metody drukowania, tak ?. Wiele odpowiedzi (w tym moja własna, którą napisałem po dalszych eksperymentach) sugerują, że 'data'table'' print' method * powinna * zwracać niewidocznie, ale w rzeczywistości zwraca się widocznie. –
tak, powinien powrócić niewidoczny – eddi