[Vegan-commits] r1941 - in pkg/vegan: R inst man
noreply at r-forge.r-project.org
noreply at r-forge.r-project.org
Sun Oct 9 21:37:39 CEST 2011
Author: jarioksa
Date: 2011-10-09 21:37:38 +0200 (Sun, 09 Oct 2011)
New Revision: 1941
Modified:
pkg/vegan/R/permutest.cca.R
pkg/vegan/inst/ChangeLog
pkg/vegan/man/anova.cca.Rd
Log:
undo 1940: did not work
Modified: pkg/vegan/R/permutest.cca.R
===================================================================
--- pkg/vegan/R/permutest.cca.R 2011-10-09 17:53:22 UTC (rev 1940)
+++ pkg/vegan/R/permutest.cca.R 2011-10-09 19:37:38 UTC (rev 1941)
@@ -7,22 +7,17 @@
`permutest.cca` <-
function (x, permutations = 99,
model = c("reduced", "direct", "full"), first = FALSE,
- strata = NULL, parallel = 1, kind = c("snow", "multicore"),...)
+ strata = NULL, parallel = 1, ...)
{
- kind <- match.arg(kind)
- parallel <- as.integer(parallel)
model <- match.arg(model)
isCCA <- !inherits(x, "rda")
isPartial <- !is.null(x$pCCA)
## Function to get the F statistics in one loop
- getF <- function (indx, ...)
+ getF <- function (R, ...)
{
- if (!is.matrix(indx))
- dim(indx) <- c(1, length(indx))
- R <- nrow(indx)
mat <- matrix(0, nrow = R, ncol = 3)
for (i in seq_len(R)) {
- take <- indx[i,]
+ take <- permuted.index(N, strata)
Y <- E[take, ]
if (isCCA)
wtake <- w[take]
@@ -106,29 +101,18 @@
runif(1)
seed <- get(".Random.seed", envir = .GlobalEnv, inherits = FALSE)
## permutations
- if (length(permutations) == 1) {
- permutations <- shuffleSet(N, permutations)
- }
- nperm <- nrow(permutations)
- if (parallel > 1 && getRversion() >= "2.14" && require(parallel)) {
- if (kind == "snow") {
- cl <- makeCluster(parallel)
- clusterEvalQ(cl, library(vegan))
- tmp <- parRapply(cl, permutations, function(i) getF(i))
- tmp <- t(matrix(tmp, nrow=3))
- stopCluster(cl)
- } else {
- tmp <- do.call(rbind,
- mclapply(1:nperm,
- function(i) getF(permutations[i,]),
- mc.cores = parallel))
- }
+ if (parallel > 1 && getRversion() >= "2.14" && require(parallel)
+ && .Platform$OS.type == "unix") {
+ R <- ceiling(permutations/parallel)
+ mc.reset.stream()
+ tmp <- do.call(rbind, mclapply(seq_len(parallel), getF, R = R,
+ mc.cores = parallel))
} else {
- tmp <- getF(permutations)
+ tmp <- getF(R = permutations)
}
- num <- tmp[,1]
- den <- tmp[,2]
- F.perm <- tmp[,3]
+ num <- tmp[1:permutations,1]
+ den <- tmp[1:permutations,2]
+ F.perm <- tmp[1:permutations,3]
## Round to avoid arbitrary ordering of statistics due to
## numerical inaccuracy
F.0 <- round(F.0, 12)
Modified: pkg/vegan/inst/ChangeLog
===================================================================
--- pkg/vegan/inst/ChangeLog 2011-10-09 17:53:22 UTC (rev 1940)
+++ pkg/vegan/inst/ChangeLog 2011-10-09 19:37:38 UTC (rev 1941)
@@ -31,31 +31,29 @@
not find function in all packages, but 'vegan' is made known, and
'stats' and 'base' seem to be known.
- * permutest.cca: implemented 'parallel' processing in
- permutest.cca. The parallelization only works in R 2.14.0 (alpha)
- and later with the 'parallel' package. Function permutest.cca gets
- a new arguments 'parallel' (defaults 1) that gives the number of
- parallel process, and 'kind' that selects the parallelization
- style which is either "snow" (large overhead, but works in al
- OS's) and "multicore" (faster, but only works in unix-like systems
- like Linux and MacOS X). The arguments are silently ignored if the
- system is not capable of parallel processing. The functionality
- cannot be included cleanly: it depends on the package 'parallel',
- but suggesting 'parallel' fails R CMD check in the current R
- release (2.13.2) which does not yet have 'parallel'. So we get
- warnings: 'library' or 'require' "call not declared from:
- parallel", and "permutest.cca: no visible global function
- definition for ‘mclapply". However, with these warnings,
- the function passes tests in R 2.13.2.
+ * permutest.cca: First attempt of setting 'parallel' processing in
+ permutest.cca. Currently the parallelization only works in R
+ 2.14.0 (alpha) and later with the 'parallel' package, and in
+ unix-like operating systems (Linux and MacOS X were
+ tested). Function permutest.cca gets a new argument 'parallel'
+ (defaults 1) that gives the number of desired parallel
+ processes. The argument is silently ignored if the system is not
+ capable of parallel processing (missing 'parallel' package,
+ Windows). The argument may be bassed to permutest.cca() from
+ anova.cca(), but currently setting the random number generator
+ seed will fail, and the results probably will be wrong. This
+ feature is only for testing. The functionality cannot be included
+ cleanly: it depends on the package 'parallel', but suggesting
+ 'parallel' fails R CMD check in the current R release (2.13.2)
+ which does not yet have 'parallel'. So we get warnings:
+ 'library' or 'require' call not declared from: parallel, and
+ permutest.cca: no visible global function definition for
+ ‘mclapply’.
+ Perhaps we delay adding this feature, and cancel this submission
+ later. However, with these warnings, the function passes tests in
+ R 2.13.2. (It fails in R 2.14.0 alpha since it suggests 'rgl', and
+ that package fails in R 2.14.0.)
- * permutest.cca: the user interface changed so that argument
- 'permutations' can be either the number permutations (like
- previosly), or a matrix of permutations like produced by
- permute::shuffleSet(). This was done to move RNG outside
- parallelized code. This will also allow much simpler and
- anova.cca* code. Currently, the 'strata' argument will not work,
- but this will be fixed "real soon now".
-
Version 2.1-2 (opened October 4, 2011)
* permutest.cca could not be update()d, because "permutest.cca"
Modified: pkg/vegan/man/anova.cca.Rd
===================================================================
--- pkg/vegan/man/anova.cca.Rd 2011-10-09 17:53:22 UTC (rev 1940)
+++ pkg/vegan/man/anova.cca.Rd 2011-10-09 19:37:38 UTC (rev 1941)
@@ -25,8 +25,7 @@
\method{permutest}{cca}(x, permutations = 99,
model = c("reduced", "direct", "full"),
- first = FALSE, strata, parallel = 1, kind = c("snow", "multicore"),
- ...)
+ first = FALSE, strata, parallel = 1, ...)
}
\arguments{
@@ -55,15 +54,11 @@
permutation. If supplied, observations are permuted only within the
specified strata.}
- \item{parallel, kind}{Number of parallel processes. The parallel
- processing is only possible in \R version 2.14.x and later. The
- argument is silently ignored if the system is not capable of
- parallel processing. There are two \code{kind} of parallelization:
- \code{kind = "snow"} selects a socket cluster which is available
- in all operationg systems, and \code{kind = "multicore"} selects a
- fork cluster that is available only in unix-like systems (Linux,
- MacOS X), but is usually faster. These arguments are experimental
- and may change or disappear in any version. }
+ \item{parallel}{Number of parallel processes. The parallel
+ processing is only possible in \R version 2.14.x and later, and
+ currently only works in unix-like operating systems, such as Linux
+ and MacOS X. The argument is silently ignored if the system is not
+ capable of parallel processing. }
}
\details{
More information about the Vegan-commits
mailing list