Hi All,
I need to sample a vector ("old"), with replacement, up to the point where my vector of samples ("new") sums to a predefined value ("target"), shortening the last sample if necessary so that the total sum ("newsum") of the samples matches the predefined value.
While I can easily do this with a "while" loop (see below for example code), because the length of both "old" and "new" may be > 20,000, a vectorized approach will save me lots of CPU time.
Any suggestions would be greatly appreciated.
Thanks, Dan
# loop approach old=c(1:10) p=runif(1:10) target=20
newsum=0 new=NULL while (newsum<target) { i=sample(old, size=1, prob=p); new[length(new)+1]=i; newsum=sum(new) } new newsum target if(newsum>target){new[length(new)]=target-sum(new[-length(new)])} new newsum=sum(new); newsum target
--
Daniel E. Bunker Associate Coordinator - BioMERGE Post-Doctoral Research Scientist Columbia University Department of Ecology, Evolution and Environmental Biology 1020 Schermerhorn Extension 1200 Amsterdam Avenue New York, NY 10027-5557
212-854-9881 212-854-8188 fax deb37ATcolumbiaDOTedu
______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html