[R-pkg-devel] tibbles are not data frames

Göran Broström goran.brostrom at umu.se
Tue Sep 26 14:08:26 CEST 2017



On 2017-09-26 14:01, Daniel Lüdecke wrote:
> You wrote:
> 
> The correct and logical way (which I use in 'eha') is to check if input is a data frame, and if not, throw an error.
> 
> If you want to check for a data frame (and a data frame only), because you don't want to coerce *any* object to data frames, then this would be one way to check for df/tibble, and coerce tibbles only. That's what I had in mind...
> 
> But as I mentioned before, since simplifying is the most (or even only?) relevant point when dealing with tibbles, I have re-written all parts in my packages that used df[, x] indexing, and replaced with df[[x]], resp. used df[, x, drop = FALSE], or - if a vector is needed - you can use "dplyr::pull()" to make sure you get a vector.

One important thing for me (my packages) is to stay out of dependence on 
other packages, as far as it is possible. But I am in the process of 
doing what you suggest: Treat a data frame as the _list_ it is. Back to 
basics!

Göran

> 
> Best
> Daniel
> 
> -----Ursprüngliche Nachricht-----
> Von: Gábor Csárdi [mailto:csardi.gabor at gmail.com]
> Gesendet: Dienstag, 26. September 2017 12:15
> An: Daniel Lüdecke <d.luedecke at uke.de>
> Cc: R Package Devel <r-package-devel at r-project.org>
> Betreff: Re: [R-pkg-devel] tibbles are not data frames
> 
> What is the benefit here, compared to just calling as.data.frame() on it?
> 
> Gabor
> 
> On Tue, Sep 26, 2017 at 11:11 AM, Daniel Lüdecke <d.luedecke at uke.de> wrote:
>> Since tibbles add their class attributes first, you could use:
>>
>> tb <- tibble(a = 5)
>> inherits(tb, "data.frame", which = TRUE) == 1
>>
>> if "tb" is a data frame (only), TRUE is returned, for tibble FALSE.
>> You could then coerce to data frame: as.data.frame(tb)
>>
>> -----Ursprüngliche Nachricht-----
>> Von: R-package-devel [mailto:r-package-devel-bounces at r-project.org] Im
>> Auftrag von Göran Broström
>> Gesendet: Dienstag, 26. September 2017 12:09
>> An: r-package-devel at r-project.org
>> Betreff: Re: [R-pkg-devel] tibbles are not data frames
>>
>>
>>
>> On 2017-09-26 11:56, Gábor Csárdi wrote:
>>> On Tue, Sep 26, 2017 at 10:35 AM, Joris Meys <Joris.Meys at ugent.be> wrote:
>>>> I don't like the dropping of dimensions either. That doesn't change
>>>> the fact that a tibble reacts different from a data.frame. So
>>>> tibbles do not inherit correctly from the class data.frame, and it
>>>> can thus be argued that it's against OOP paradigms to pretend
>>>> tibbles inherit from the class data.frame.
>>>
>>> I have yet to see an OOP system in which a subclass cannot override
>>> the methods of its superclass. Not only is this in line with OOP
>>> paradigms, it is actually one of the essential OOP features.
>>>
>>> To be more constructive, if you have a function that only works with
>>> data frame inputs, then it is good practice to check that the
>>> supplied input is indeed a data frame. This is independent of tibbles.
>>
>> It is not. I check input for being a data frame, but tibbles pass that test. That's the essence of the problem.
>>
>>> In practice it seems to me that an easy fix is to just call
>>> as.data.frame on the input. This should either convert it to a data
>>> frame, or throw an error.
>>
>> Sure, but I still need to rewrite the package.
>>
>> Görn
>>
>>> For tibbles it
>>> drops the tbl* classes.
>>>
>>> Gabor
>>>
>>>> Defensive coding techniques would check if it's a tibble and return
>>>> an error saying a data.frame is expected. Unless tibbles inherit
>>>> correctly from data.frame.
>>>>
>>>> I have nothing against tibbles. But calling them "data.frame" raises
>>>> expectations that can't be fulfilled.
>>>
>>> [...]
>>>
>>> ______________________________________________
>>> R-package-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>>
>>
>> ______________________________________________
>> R-package-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>
>> --
>>
>> _____________________________________________________________________
>>
>> Universitätsklinikum Hamburg-Eppendorf; Körperschaft des öffentlichen
>> Rechts; Gerichtsstand: Hamburg | www.uke.de
>> Vorstandsmitglieder: Prof. Dr. Burkhard Göke (Vorsitzender), Prof. Dr.
>> Dr. Uwe Koch-Gromus, Joachim Prölß, Martina Saurin (komm.)
>> _____________________________________________________________________
>>
>> SAVE PAPER - THINK BEFORE PRINTING
>> ______________________________________________
>> R-package-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
> 
> --
> 
> _____________________________________________________________________
> 
> Universitätsklinikum Hamburg-Eppendorf; Körperschaft des öffentlichen Rechts; Gerichtsstand: Hamburg | www.uke.de
> Vorstandsmitglieder: Prof. Dr. Burkhard Göke (Vorsitzender), Prof. Dr. Dr. Uwe Koch-Gromus, Joachim Prölß, Martina Saurin (komm.)
> _____________________________________________________________________
> 
> SAVE PAPER - THINK BEFORE PRINTING
> ______________________________________________
> R-package-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>



More information about the R-package-devel mailing list