[R] Sweave problem with recursive call

g.wrobel@dkfz-heidelberg.de g.wrobel at dkfz-heidelberg.de
Fri Jul 12 11:33:53 CEST 2002

while trying to play around with Sweave I found out that I was unable to call  
Sweave in a code chunk that is being parsed by Sweave.   
Code chunk that is being parsed:  
for (i in 1:length(chips[,1])) {  
system(paste("./concatenateAnalysis -",i,sep=""))  
The function createAnalysis that is called:  
createAnalysis <- function(curChip, counter) {  
  system(paste("mv analyseChip.tex aC_",counter,".tex",sep=""))  
And the code chunk from analyseChip.Rnw:  
gpr <- gpr.load.file(curChip,gpr.load.std)  
  \item[Filename] \Sexpr{curChip}  
  \item[Date] \Sexpr{gpr$DateTime}  
That leads to the follwing error: 
>  require(tools) 
Loading required package: tools 
[1] TRUE 
> Sweave("analyse.Rnw") 
Writing to file analyse.tex 
Processing code chunks ... 
 1 : echo term verbatim 
 2 : echo term verbatim 
 3 : echo term verbatim 
Read 1 items 
Read 6144 records 
Read 1 records 
Error: can not set length of non-vector 
Error in driver$runcode(drobj, chunk, chunkopts) : 
        Error: can not set length of non-vector 
Basically Sweave creates a text connection to an object called "output" in the 
main environment while evaluating a code chunk. When calling Sweave in a code 
chunk this "output" is referenced with several textconnections. I attached a 
diff file with a suggestion how to circumvent the problem. It can be applied 
to the Sweave.R file in the tools-1.5.0.tar.gz archive. 
Gunnar Wrobel 
-------------- next part --------------
<         tmpcon <- textConnection("output", "w")
>         if (is.finite(max(as.integer(sub("output","",apropos("output"))),na.rm=TRUE))) {
>           oc <- max(as.integer(sub("output","",apropos("output"))),na.rm=TRUE)+1
>         } else {
>           oc <- 0
>         }
>         tmpcon <- textConnection(paste("output",oc,sep=""), "w")
>         output <- get(paste("output",oc,sep=""))

More information about the R-help mailing list