"CsampleNIter.MBnetwork.MBparams" <- function(x,params,n,method="d",temp=1,init=TRUE,gsub=TRUE,prob=NULL,verbose=TRUE,...) { isCompat <- compatObjects(x,params) if(!is.numeric(n) || is.null(n) || is.na(n) || (n<0) || (n!=as.integer(n))) stop("Number of iterations must be an integer >= 0") if(!is.numeric(temp) || is.null(temp) || is.na(temp) || (temp<=0)) stop("Temperature must be a numeric > 0") if(init) x <- initCounts(x,...) if(n==0) { x@Counts[2,!is.na(x@States)] <- x@Counts[2,!is.na(x@States)] + x@States[!is.na(x@States)] x@Counts[1,!is.na(x@States)] <- x@Counts[1,!is.na(x@States)] + (1-x@States[!is.na(x@States)]) x <- calcMargs(x,...) return(x) } sub <- rep(FALSE,params@N) prior <- 1 for(i in 1:params@m) { if(all(params@Values[,i]==0)) next if(is.matrix.csr(params@Sim[[i]])) { diag.test <- as(params@N,"matrix.diag.csr") if((length(params@Sim[[i]]@ra)==length(diag.test@ra)) && all(c(params@Sim[[i]]@ra,params@Sim[[i]]@ja,params@Sim[[i]]@ia) == c(diag.test@ra,diag.test@ja,diag.test@ia))) { prior <- exp(params@Values[1,i]) next } sub <- sub | as.logical(params@Sim[[i]]@ia[2:(params@N+1)]-params@Sim[[i]]@ia[1:params@N]) } else { diag.test <- diag(params@N) if(all(params@Sim[[i]] == diag.test)) { prior <- exp(params@Values[1,i]) next } sub <- sub | !apply(params@Sim[[i]],1,function(x) all(x==0)) } } if(!all(sub)) { to.use <- !is.na(x@Cpds[1,]) & !sub & gsub rnd.cnts <- round(n*x@Cpds[2,to.use]/(x@Cpds[2,to.use]+x@Cpds[1,to.use]*prior)) if(!is.null(prob)) rnd.cnts[!is.na(prob[to.use])] <- round(n*prob[to.use][!is.na(prob[to.use])]) x@Counts[2,to.use] <- x@Counts[2,to.use] + rnd.cnts x@Counts[1,to.use] <- x@Counts[1,to.use] + n-rnd.cnts } sub <- sub & gsub if(any(sub)) { sub <- which(sub) sub.len <- length(sub) lCpds <- log(x@Cpds) if(is.null(prob)) prob <- as.numeric(rep(NA,params@N)) .Call("CsampleNIter",n,sub.len,sub,prob,lCpds,x@States,x@Counts,params@Sim,params@Values,method,temp,verbose,PACKAGE="mBison") } x <- calcMargs(x,...) return(x) }