> On 26 Jun 2017, at 19:04 , Martin Maechler <maech...@stat.math.ethz.ch> wrote:
> 
>>>>>> peter dalgaard <pda...@gmail.com>
>>>>>>    on Mon, 26 Jun 2017 13:43:28 +0200 writes:
> 
>> This seems to be due to changes made by Martin Maechler in
>> 2008. Presumably this fixed something, but it escapes my
>> memory.
> 
> Yes: The change set (svn -c46441) also contains the following NEWS entry
> 
> BUG FIXES
> 
>     o within(<dataframe>, { ... }) now also works when '...' removes
>       more than one column.
> 

The odd thing is that the assign-NULL technique used for removing a single 
column, NOW also seems to work for several columns in a data frame, so I wonder 
what the bug was back then...

-pd


> 
>> However, it seems to have broken the equivalence
>> between within.list and within.data.frame, so now
> 
>>  within.list <- within.data.frame
> 
>> does not suffice.
> 
> There have been many improvements since then, so maybe we can
> change the code so that the above will work again.
> 
> Another problem seems that we had no tests of  within.list()
> anywhere... so we will have them now.
> 
> I've hade an idea that seems to work and even simplify the
> code....  will get back to the issue later in the evening.
> 
> Martin
> 
> 
>> The crux of the matter seems to be that both the following
>> constructions work for data frames
> 
>>> aq <- head(airquality)
>>> names(aq)
>> [1] "Ozone"   "Solar.R" "Wind"    "Temp"    "Month"   "Day"    
>>> aq[c("Wind","Temp")] <- NULL
>>> aq
>> Ozone Solar.R Month Day
>> 1    41     190     5   1
>> 2    36     118     5   2
>> 3    12     149     5   3
>> 4    18     313     5   4
>> 5    NA      NA     5   5
>> 6    28      NA     5   6
>>> aq <- head(airquality)
>>> aq[c("Wind","Temp")] <- vector("list",2)
>>> aq
>> Ozone Solar.R Month Day
>> 1    41     190     5   1
>> 2    36     118     5   2
>> 3    12     149     5   3
>> 4    18     313     5   4
>> 5    NA      NA     5   5
>> 6    28      NA     5   6
> 
>> However, for lists they differ:
> 
>>> aq <- as.list(head(airquality))
>>> aq[c("Wind","Temp")] <- vector("list",2)
>>> aq
>> $Ozone
>> [1] 41 36 12 18 NA 28
> 
>> $Solar.R
>> [1] 190 118 149 313  NA  NA
> 
>> $Wind
>> NULL
> 
>> $Temp
>> NULL
> 
>> $Month
>> [1] 5 5 5 5 5 5
> 
>> $Day
>> [1] 1 2 3 4 5 6
> 
>>> aq <- as.list(head(airquality))
>>> aq[c("Wind","Temp")] <- NULL
>>> aq
>> $Ozone
>> [1] 41 36 12 18 NA 28
> 
>> $Solar.R
>> [1] 190 118 149 313  NA  NA
> 
>> $Month
>> [1] 5 5 5 5 5 5
> 
>> $Day
>> [1] 1 2 3 4 5 6
> 
> 
>> -pd
> 
>>> On 26 Jun 2017, at 04:40 , Hong Ooi via R-devel <r-devel@r-project.org> 
>>> wrote:
>>> 
>>> The behaviour of within() with list input changes if you delete 2 or more 
>>> variables, compared to deleting one:
>>> 
>>> l <- list(x=1, y=2, z=3)
>>> 
>>> within(l,
>>> {
>>> rm(z)
>>> })
>>> #$x
>>> #[1] 1
>>> #
>>> #$y
>>> #[1] 2
>>> 
>>> 
>>> within(l, {
>>> rm(y)
>>> rm(z)
>>> })
>>> #$x
>>> #[1] 1
>>> #
>>> #$y
>>> #NULL
>>> #
>>> #$z
>>> #NULL
>>> 
>>> 
>>> When 2 or more variables are deleted, the list entries are instead set to 
>>> NULL. Is this intended?
>>> 
>>> ______________________________________________
>>> R-devel@r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
> 
>> -- 
>> Peter Dalgaard, Professor,
>> Center for Statistics, Copenhagen Business School
>> Solbjerg Plads 3, 2000 Frederiksberg, Denmark
>> Phone: (+45)38153501
>> Office: A 4.23
>> Email: pd....@cbs.dk  Priv: pda...@gmail.com
> 
> 
> 
> 
> 
> 
> 
> 

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd....@cbs.dk  Priv: pda...@gmail.com

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to