[Rd] several bugs (PR#918)

rmh@surfer.sbm.temple.edu rmh@surfer.sbm.temple.edu
Mon, 23 Apr 2001 05:09:22 +0200 (MET DST)


# Your mailer is set to "none" (default on Windows),
# hence we cannot send the bug report directly from R.
# Please copy the bug report (after finishing it) to
# your favorite email program and send it to
#
#       r-bugs@r-project.org
#
######################################################



1. as.numeric behaves differently in R than in S and I think this
shows a bug in how S3 classes are implemented.

R:
> as.numeric
function (x, ...) 
UseMethod("as.double")
> as.double
function (x, ...) 
UseMethod("as.double")


S:
> as.numeric
function(x)
Internal(as.numeric(x), "As_vector", T, 4)
> as.double
function(x)
.Internal(as.double(x), "As_vector", T, 4)
>


As a consequence, a user function
  as.numeric.mv 
doesn't work as a method in R because it never gets called when
accessed as as.numeric(x).

> objects()
character(0)
> a <- list(NA)
> attr(a[[1]],"mv") <- "default"
> class(a) <- "mv"
> 
> a
[[1]]
[1] NA
attr(,"mv")
[1] "default"

attr(,"class")
[1] "mv"
> as.numeric(a)
[1] NA
> as.numeric.mv <- function(x, ...) {
+   print("we got here")
+  x
+ }
> 
> as.numeric(a)  ## the function as.numeric.mv was not called
[1] NA
> as.numeric.mv(a)
[1] "we got here"
[1] NA
> 



2. works in S-Plus 4.5, not in R.  What is the rationale for this difference?

a <- list(NULL)
attr(a[[1]],"mv") <- "default"

R gives the message
Error: attempt to set an attribute on NULL



3. Unimplemented features in rep, copyVector
> rep(list(1),1)
[[1]]
[1] 1

> rep(list(1,2,3),1)
Error in rep(list(1, 2, 3), 1) : Unimplemented feature in rep

> a <- matrix(list(1,2,3,4,5,6), 2, 3)

Error in matrix(list(1, 2, 3, 4, 5, 6), 2, 3) : 
	Unimplemented feature in copyVector


4. methods in S-Plus that aren't methods in R. 
a. %*% is a method in S-Plus 4.5 and is a primitive in R.
   Therefore a user function "%*%.mv" doesn't get called by  a %*% b



5. S-Plus 6 compatibility issues
a. S+4 and R use the function
     exists("function.name", mode="function")
   S+6 use the function
     existsFunction("function.name")

More generally, S-Plus 6 has the following functions
> objip("exists")
$splus:
[1] "exists"         "existsFunction" "file.exists"   

$main:
[1] "dbexists"       "dbexistsOld"    "dyn.exists"     "existsClass"
[5]  "existsClassDef" "existsDoc"     "existsMethod"  

Can you add these function names to R with sensible defaults until the S4
methods are fully in place?


b. S-Plus 6 uses the function oldClass
Can you add these functions and default definitions to R?
  oldClass <- function(...) class(...)   
  "oldClass<-" <- function(...) "class<-"(...)  


6. bug in "[" for lists

a <- list(1,2,3,4,5,6)
dim(a) <- c(2,3)
unlist(a)
> a[,1:2]
     [,1]   [,2]  
[1,] "NULL" "NULL"
[2,] "NULL" "NULL"

The same code in S+4 gives
> a[,1:2]
     [,1] [,2] 
[1,] 1    3   
[2,] 2    4   




--please do not edit the information below--

Version:
 platform = i386-pc-mingw32
 arch = x86
 os = Win32
 system = x86, Win32
 status = 
 major = 1
 minor = 2.1
 year = 2001
 month = 01
 day = 15
 language = R

Windows 9x 4.0 (build 1212)  B

Search Path:
 .GlobalEnv, package:ctest, Autoloads, package:base

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._