From Writing R Extensions
The test of cyclic declarations in DESCRIPTION files needs repositories (including CRAN) set: do this in ~/.Rprofile, by e.g
options(repos = c(CRAN="http://cran.r-project.org"))
Recommended
User should double check if his .Rprofile is in his home and that it contains the mentioned option.
# in R session (any platform)
# where is my profile?
file.path(Sys.glob("~"),".Rprofile")
# is it there?
file.exists(file.path(Sys.glob("~"),".Rprofile"))
Or from R session using extra package:
library(pathological)
r_profile()
User should double check if the option entry is not nested in the IF condition, like in the following code:
# this will not help for R CMD check --as-cran
if(interactive()) {
options(repos = c(CRAN="http://cran.r-project.org"))
}
Dry run for any platform
Here is R script preparing easy temporary case of R package for testing, helping to faster find what is going wrong in your local usage.
This aproach helped myself to locate what was wrong in my .Rprofile file and generally can help to set up working initial state.
In best case, the check run should show only 1 NOTE about new submission.
- first copy/paste the code and source it in your R session (--vanilla
preferably)
- then run the command printed by the script to check test case --as-cran.
Example
# for example
R --vanilla -f makePackage.R
# here the resulting package path is as below
R --no-site-file CMD check --as-cran /tmp/pkgtest
# now see the check log
If your .Rprofile does not exist it will be created and one new line placed at the end of file in any case.
The makePackage.R
script
# makePackage.R
# makes simple package for playing with check --as-cran
# copy this content to file makePackage.R
# then source it into your R --vanilla session
name <- "pkgtest"
#
# prepare and adjust package template
#
tempbase <- dirname(tempdir())
e <- new.env()
path <- dirname(tempdir())
# make simple package in path
e$fu <- function(){"Hello"}
package.skeleton(name=name,force=T,path=path,environment=e)
nil <- file.remove(
file.path(path,name,'Read-and-delete-me'),
file.path(path,name,'man',paste0(name,'-package.Rd'))
)
# adjust DESCRIPTION
D <- readLines(file.path(path,name,"DESCRIPTION"))
D[grepl("^Title: ",D)] <- "Title: Testing Skeleton"
D[grepl("^Author: ",D)] <- "Author: John Doe"
D[grepl("^Description: ",D)] <- "Description: Checking --as-cran check."
D[grepl("^Maintainer: ",D)] <- "Maintainer: John Doe <jdoe@doe.net>"
D[grepl("^License: ",D)] <- "License: GPL (>= 2)"
write(D,file.path(path,name,"DESCRIPTION"))
# make fu.Rd
write(
"\name{fu}\alias{fu}\title{Prints}\description{Prints}
\usage{fu()}\examples{fu()}",
file.path(path,name,'man','fu.Rd'))
#
# ensure that .Rprofile contains repos option
# add fresh new line et the end of .Rprofile
#
userRp <- file.path(Sys.glob("~"),".Rprofile")
write("options(repos = c(CRAN='http://cran.r-project.org'))",file=userRp, append=TRUE)
#
# print final message
#
msg <- sprintf("
Your test package was created in %s,
under name %s,
your user .Rprofile in %s was modified (option repos),
now check this test package from command line by command:
R --no-site-file CMD check --as-cran %s
", path, name, userRp, file.path(path,name)
)
# now is time to check the skeleton
message(msg)
Checking the package
# replace package-path by the path adviced by the sourcing the script above
R --no-site-file CMD check --as-cran package-path
There is user profile and site profile, in the approach above you bypasses site profile (in second step) by using --no-site-file
option for package skeleton option.
PDF errors
You can experience PDF and latex related errors, caused very likely by missing or not complete latex instalation. Ycan use --no-manual
option to skip PDF tests.
R --no-site-file CMD check --no-manual --as-cran /tmp/pkgtest