[R] Problem with loading a package containing operator

cgw at witthoft.com cgw at witthoft.com
Fri Jul 8 14:29:56 CEST 2016


I have a published package cgwtools which includes an overload of the !
operator. Here's the code from the source file splatnd.r : 

`!` <- function (e1, e2) 
{
call <- match.call()
original <- function() {
call[[1]] <- quote(base::`!`)
return(eval(call, parent.frame(2)))
} 

switch(paste(as.character(call[[2]]), sep = "", collapse = ""), 
newdev = dev.new(width = 4.5, height = 4.5, restoreConsole = T), 
qapla = cat("batlh tIn chav\n"), return(original()))
}
This is based on the neat tool in the sos package called ??? . If I
simply source the ! code, it runs as expected. In the past, at least
prior to R 3.2.x , loading the package cgwtools let me run ! as
expected. I recently set up both versions 3.2.4 and 3.3.1 on a Windows 7
machine, and got an odd apparent failure to load. Here's some console
text, showing the searchpath before and after loading cgwtools 

> getAnywhere(`!`)
A single object matching '!' was found
It was found in the following places
package:base
namespace:base
with value 

function (x) .Primitive("!")
> library(cgwtools)
> getAnywhere(`!`)
2 differing objects matching '!' were found
in the following places
package:base
namespace:cgwtools
namespace:base
By way of comparison, doing the same with the sos package returns what
I'd expect: 

> getAnywhere(`?`)
2 differing objects matching '?' were found
in the following places
package:sos
package:utils
namespace:utils
namespace:sos
If I access the output, the correct source code is shown: 

> getAnywhere(`!`)[2]
function (e1, e2) 
{
call <- match.call()
original <- function() {
call[[1]] <- quote(base::`!`)
return(eval(call, parent.frame(2)))
}
switch(paste(as.character(call[[2]]), sep = "", collapse = ""), 
newdev = dev.new(width = 4.5, height = 4.5, restoreConsole = T), 
qapla = cat("batlh tIn chav\n"), return(original()))
}
<environment: namespace:cgwtools>
But , as indicated by the lack of the text package:cgwtools , when I try
to run, say !qapla from the gui console, I get the error message that
qapla is not found, i.e. the .Primitive operator ! was invoked. 

So the question is: why is the ! function in the cgwtools package not
being recognized after loading the package? Did I do something dumb when
building the package source, or did I find some bug in the CRAN builder?


Sub-question: I can't figure out any variant of the directed command
cgwtools::'!'qapla that doesn't cause a parse error.
	[[alternative HTML version deleted]]



More information about the R-help mailing list