From p.dalgaard at biostat.ku.dk  Wed Nov 29 21:31:22 2006
From: p.dalgaard at biostat.ku.dk (p.dalgaard at biostat.ku.dk)
Date: Wed, 29 Nov 2006 21:31:22 +0100 (CET)
Subject: [Rd] rm() deletes 'c' if c('a','b') is the argument (PR#9399)
Message-ID: <20061129203122.5A5CB57355@slim.kubism.ku.dk>

Steven McKinney wrote:
> Same behaviour seen on Apple Mac OSX 10.4.8 platform:
>
>   
>> sessionInfo()
>>     
> R version 2.4.0 Patched (2006-10-31 r39758) 
> powerpc-apple-darwin8.8.0 
>
> locale:
> en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8
>
> attached base packages:
> [1] "methods"   "stats"     "graphics"  "grDevices" "utils"     "datasets"  "base"     
>
> other attached packages:
>     XML 
> "1.2-0" 
>   
>> ls()
>>     
> [1] "getMonograph" "last.warning" "myfun"       
>   
>> a <- 1
>> b <- 2
>> c <- letters
>> a
>>     
> [1] 1
>   
>> b
>>     
> [1] 2
>   
>> c
>>     
>  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
>   
>> rm(c('a', 'b'))
>> a
>>     
> Error: object "a" not found
>   
>> b
>>     
> Error: object "b" not found
>   
>> c
>>     
> .Primitive("c")
>   
>> ls()
>>     
> [1] "getMonograph" "last.warning" "myfun"       
>   
>> a <- 1
>> b <- 2
>> d <- letters
>> ls()
>>     
> [1] "a"            "b"            "d"            "getMonograph" "last.warning" "myfun"       
>   
>> rm(c('a', 'b'))
>>     
> Warning message:
> remove: variable "c" was not found 
>   
>> ls()
>>     
> [1] "d"            "getMonograph" "last.warning" "myfun"       
>   
>
> Steven McKinney
>
> Statistician
> Molecular Oncology and Breast Cancer Program
> British Columbia Cancer Research Centre
>
> email: smckinney at bccrc.ca
>
> tel: 604-675-8000 x7561
>
> BCCRC
> Molecular Oncology
> 675 West 10th Ave, Floor 4
> Vancouver B.C. 
> V5Z 1L3
> Canada
>
>
>
>
> -----Original Message-----
> From: r-devel-bounces at r-project.org on behalf of hanl2 at wyeth.com
> Sent: Wed 11/29/2006 10:35 AM
> To: r-devel at stat.math.ethz.ch
> Cc: R-bugs at biostat.ku.dk
> Subject: [Rd] rm() deletes 'c' if c('a','b') is the argument (PR#9399)
>  
> Full_Name: Lixin Han
> Version: 2.4.0
> OS: Windows 2000
> Submission from: (NULL) (155.94.110.222)
>
>
> A character vector c('a','b') is supplied to rm().  As a result, 'c' is deleted
> unintentionally.
>
>   
>> a <- 1:5
>> b <- 'abc'
>> c <- letters
>> ls()
>>     
> [1] "a" "b" "c"
>   
>> rm(c('a','b'))
>> ls()
>>     
> character(0)
>   
>
>   
The reason is that
 > x <- function(...) sapply(match.call(expand.dots = FALSE)$..., 
as.character)
 > x(c(a,b))
     [,1]
[1,] "c"
[2,] "a"
[3,] "b"

Which in turn happens because
 > as.character(quote(c(a,b)))
[1] "c" "a" "b"

I don't know if it really qualifies as a bug, but it's not documented 
that as.character() is used and I suppose we could be more careful with 
the argument checking.



[Rd] rm() deletes 'c' if c('a','b') is the argument (PR#9399)
p.dalgaard at biostat.ku.dk