Odd behaviour in within.list() when deleting 2+ variables
This seems to be due to changes made by Martin Maechler in 2008. Presumably this fixed something, but it escapes my memory. 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. 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 at 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 at 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.mes at cbs.dk Priv: PDalgd at gmail.com