From florent.angly at gmail.com  Sat Dec 24 14:27:49 2016
From: florent.angly at gmail.com (Florent Angly)
Date: Sat, 24 Dec 2016 14:27:49 +0100
Subject: [Rd] Unexpected I(NULL) output
In-Reply-To: <22619.39899.159293.404959@stat.math.ethz.ch>
References: <CAOiMVK21fs6VpZnQZ0jH0t5YeJ6TvcLyO7digyXBmzV23yEbpg@mail.gmail.com>
	<22619.39899.159293.404959@stat.math.ethz.ch>
Message-ID: <CAOiMVK0CVuRSi3L+wc_chWAiVmcNPgT-zJ3C3omEF_61-g55Gw@mail.gmail.com>

Thank you for the feedback, Martin. Of course, deprecating would be a
sensible way to go.
I filed this issue on BugZilla under # 17198.
Florent

On 22 December 2016 at 10:24, Martin Maechler
<maechler at stat.math.ethz.ch> wrote:
>>>>>> Florent Angly <florent.angly at gmail.com>
>>>>>>     on Tue, 20 Dec 2016 13:42:37 +0100 writes:
>
>     > Hi all,
>     > I believe there is an issue with passing NULL to the function I().
>
>     > class(NULL)  # "NULL"  (as expected)
>     > print(NULL)   # NULL  (as expected)
>     > is.null(NULL) # TRUE  (as expected)
>
>     > According to the documentation I() should return a copy of its input
>     > with class "AsIs" preprended:
>
>     > class(I(NULL))  # "AsIs"  (as expected)
>     > print(I(NULL))   # list()  (not expected! should be NULL)
>     > is.null(I(NULL)) # FALSE  (not expected! should be TRUE)
>
>     > So, I() does not behave according to its documentation.
>
> yes.
>
>     > In R, it is
>     > not possible to give NULL attributes, but I(NULL) attempts to do that
>     > nonetheless, using the structure() function. Probably:
>     > 1/ structure() should not accept NULL as input since the goal of
>     > structure() is to set some attributes, something cannot be done on
>     > NULL.
>
> I tend to agree.  However if we gave an error now, I notice that
> even our own code, e.g., in stats:::formula.default()  would fail.
>
> Still, I think we should consider *deprecating*  structure(NULL, *),
> so it would give a *warning* (and continue working otherwise)
> (for a while before giving an error a year later).
>
>     > 2/ I() could accept NULL, but, as an exception, not set an "AsIs"
>     > class attribute on it. This would be in line with the philosophy of
>     > the I() function to return an object that is functionally equivalent
>     > to the input object.
>
> If we'd adopt 2, the I(.) function would become slightly more
> complicated and slower...  but possibly not practically
> noticeable.
>
> A last option would be
>
> 3/  The help page for I() could note what happens in the NULL case.
>
> That would be the least work for everyone,
> but at the moment, I tend to agree that '1/' is worth the pain to
> have R's structure() become more consistent.
>
> Martin Maechler
> ETH Zurich
>
>     > My sessionInfo() returns:
>     >> sessionInfo()
>     > R version 3.3.2 (2016-10-31)
>     > Platform: x86_64-w64-mingw32/x64 (64-bit)
>     > Running under: Windows 7 x64 (build 7601) Service Pack 1
>
>     > locale:
>     > [1] LC_COLLATE=German_Switzerland.1252
>     > LC_CTYPE=German_Switzerland.1252
>     > LC_MONETARY=German_Switzerland.1252 LC_NUMERIC=C
>     > [5] LC_TIME=German_Switzerland.1252
>
>     > attached base packages:
>     > [1] stats     graphics  grDevices utils     datasets  methods   base
>
>     > Best regards,
>
>     > Florent
>
>     > ______________________________________________
>     > R-devel at r-project.org mailing list
>     > https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] Unexpected I(NULL) output
Florent Angly