OK, so I think until we figure this out and/or the fix is on CRAN I can work 
around it using eval=FALSE with some hidden code blocks to hide the double 
colon notation. I've installed the latest revision of knitr, and it does fix 
the problem.





On Tuesday, 2 April 2013 at 4:40 AM, Yihui Xie wrote:

> I do not know much about S4, but I figured out one possible solution
> on knitr's side, which I do not really understand. In short, your S4
> methods need to be evaluated in globalenv(), but knitr uses the
> parent.frame() by default, which is not the global environment when it
> is called as the vignette builder.
> 
> Now I have forced the evaluation to be in the global environment, and
> pushed the changes to the knitr development version on Github:
> https://github.com/yihui/knitr
> 
> Regards,
> Yihui
> --
> Yihui Xie <xieyi...@gmail.com (mailto:xieyi...@gmail.com)>
> Phone: 515-294-2465 Web: http://yihui.name
> Department of Statistics, Iowa State University
> 2215 Snedecor Hall, Ames, IA
> 
> 
> On Mon, Apr 1, 2013 at 7:37 PM, Henrik Bengtsson <h...@biostat.ucsf.edu 
> (mailto:h...@biostat.ucsf.edu)> wrote:
> > Hi,
> > 
> > things have indeed changed on how non-Sweave vignettes are built (this
> > happened around R devel 2013-03-05 r62130). However, it's not clear
> > to me what changes would be behind your problems, if any.
> > 
> > Build your vignette with the following buildVignette(), which emulates
> > what R does when it builds vignettes (cf. tools::buildVignettes()).
> > As you'll see, it reproduces your error:
> > 
> > if (!exists("buildVignette", mode="function")) {
> > source("http://r-forge.r-project.org/scm/viewvc.php/*checkout*/pkg/R.rsp/R/buildVignette.R?root=r-dots";);
> > }
> > 
> > EXAMPLE (in a fresh R session):
> > 
> > url <- 
> > "http://r-forge.r-project.org/scm/viewvc.php/*checkout*/pkg/BayesFactorPCL/vignettes/manual.Rmd?root=bayesfactorpcl";
> > if (!file.exists("manual.Rmd")) download.file(url, "manual.Rmd");
> > 
> > output <- buildVignette("manual.Rmd", buildPkg="knitr");
> > browseURL(output);
> > 
> > bfr <- readLines(output);
> > idxs <- grep("which.max(bf)", bfr, fixed=TRUE);
> > idxs <- sort(sapply(idxs, FUN=function(idx) idx+(-5:5)));
> > cat(sprintf("%03d: %s\n", idxs, bfr[idxs]));
> > 
> > > cat(sprintf("%03d: %s", idxs, bfr[idxs]), sep="\n")
> > 2517: </code></pre>
> > 2518:
> > 2519: <pre><code>## [1] TRUE
> > 2520: </code></pre>
> > 2521:
> > 2522: <pre><code class="r">BayesFactor::which.max(bf)
> > 2523: </code></pre>
> > 2524:
> > 2525: <pre><code>## complaints
> > 2526: ## 1
> > 2527: </code></pre>
> > 2531:
> > 2532: <pre><code>## critical + advance
> > 2533: ## 21
> > 2534: </code></pre>
> > 2535:
> > 2536: <pre><code class="r">which.max(bf)
> > 2537: </code></pre>
> > 2538:
> > 2539: <pre><code>## Error: no method for coercing this S4 class to a vector
> > 2540: </code></pre>
> > 2541:
> > 
> > So, have a look at browseVignette() and how it calls the 'knitr' weave
> > function. That should help you narrow down what's going on.
> > 
> > > sessionInfo()
> > R version 3.0.0 RC (2013-03-31 r62463)
> > Platform: x86_64-w64-mingw32/x64 (64-bit)
> > 
> > locale:
> > [1] LC_COLLATE=English_United States.1252
> > [2] LC_CTYPE=English_United States.1252
> > [3] LC_MONETARY=English_United States.1252
> > [4] LC_NUMERIC=C
> > [5] LC_TIME=English_United States.1252
> > 
> > attached base packages:
> > [1] tools stats graphics grDevices utils datasets methods
> > [8] base
> > 
> > other attached packages:
> > [1] BayesFactor_0.9.3 markdown_0.5.4 coda_0.16-1 lattice_0.20-15
> > [5] knitr_1.1.7
> > 
> > loaded via a namespace (and not attached):
> > [1] digest_0.6.3 evaluate_0.4.3 formatR_0.7 grid_3.0.0
> > [5] mvtnorm_0.9-9994 pbapply_1.0-5 stringr_0.6.2
> > 
> > Hope this helps
> > 
> > /Henrik
> > 
> > On Mon, Apr 1, 2013 at 4:52 PM, Richard D. Morey <r.d.mo...@rug.nl 
> > (mailto:r.d.mo...@rug.nl)> wrote:
> > > A new problem has cropped up with compiling vignettes for my package 
> > > BayesFactor. I'm not sure when it started, but I can tell you it didn't 
> > > occur on R 2.15.3, and it does on 3.0.0 RC (2013-03-31 r62463) (session 
> > > info is at the bottom of this message).
> > > 
> > > I have defined methods for which.min and which.max for a class (I've 
> > > defined both S3 and S4 methods for the class "BFBayesFactor") in my 
> > > package. I've exported the S4 class using exportMethods, and declared the 
> > > S3 method with S3method. You can see the NAMESPACE file here:
> > > 
> > > https://r-forge.r-project.org/scm/viewvc.php/pkg/BayesFactorPCL/NAMESPACE?view=markup&root=bayesfactorpcl
> > > 
> > > and the methods here:
> > > 
> > > https://r-forge.r-project.org/scm/viewvc.php/pkg/BayesFactorPCL/R/methods-BFBayesFactor.R?view=markup&root=bayesfactorpcl
> > > 
> > > I have code in a vignette that calls the which.max method on a 
> > > BFBayesFactor object. However, when that happens as the vignette is being 
> > > compiled, I get an error:
> > > 
> > > which.max(bf)
> > > ## Error: no method for coercing this S4 class to a vector
> > > 
> > > 
> > > 
> > > This also occurs with which.min, but oddly not any other method 
> > > (including the is.na method, which is declared exactly the same way, as 
> > > far as I can tell). This seems to imply that the which.min and which.max 
> > > methods are not exported.
> > > 
> > > When I use double colon notation - which as I understand, only works with 
> > > exported functions - it works (see below).
> > > 
> > > When I compile the Rmd file manually, I do not see this problem; I get no 
> > > errors. This seems to be a problem unique to compiling the vignette. I've 
> > > tried it in Rstudio, R from the command line, and using Rscript and 
> > > calling knitr directly. It only occurs when building a vignette for the 
> > > source package.
> > > 
> > > Steps to reproduce:
> > > 1. Check out latest version of BayesFactor package from R-forge 
> > > (https://r-forge.r-project.org/scm/?group_id=554) (revision 320)
> > > 
> > > 2. Create a source package (which compiles the vignette)
> > > 
> > > 3. Open tar to see compiled vignette HTML (doc/manual.html - or, 
> > > alternatively, see 
> > > https://www.dropbox.com/s/6csznytp8i1akjl/manual.html). Search for second 
> > > occurrence of "which.max", and see the following lines:
> > > 
> > > ## which model index is the best?
> > > is(bf, "BFBayesFactor")
> > > ## [1] TRUE
> > > BayesFactor::which.max(bf)
> > > ## complaints
> > > ## 1
> > > BayesFactor::which.min(bf)
> > > ## critical + advance
> > > ## 21
> > > which.max(bf)
> > > ## Error: no method for coercing this S4 class to a vector
> > > which.min(bf)
> > > ## Error: no method for coercing this S4 class to a vector
> > > 
> > > 
> > > 
> > > I've been pulling my hair out on this, especially because something seems 
> > > to have changed over the past few weeks that caused this, but I didn't 
> > > catch exactly when, and I don't know if the issue lies with R 3.0.0 or my 
> > > package.
> > > 
> > > > sessionInfo()
> > > R version 3.0.0 RC (2013-03-31 r62463)
> > > Platform: x86_64-apple-darwin10.8.0 (64-bit)
> > > locale:
> > > [1] en_AU.UTF-8/en_AU.UTF-8/en_AU.UTF-8/C/en_AU.UTF-8/en_AU.UTF-8
> > > attached base packages:
> > > [1] stats graphics grDevices utils datasets methods base
> > > other attached packages:
> > > [1] BayesFactor_0.9.5 markdown_0.5.4 knitr_1.1.6 coda_0.16-1 
> > > lattice_0.20-15
> > > loaded via a namespace (and not attached):
> > > [1] digest_0.6.3 evaluate_0.4.3 formatR_0.7 grid_3.0.0 mvtnorm_0.9-9994
> > > [6] pbapply_1.0-5 stringr_0.6.2 tools_3.0.0
> > > 
> > > 
> > > 
> > > 
> > > Any help would be greatly appreciated,
> > > Richard
> > 
>

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to