[R] vectorized approach to cumulative sampling
Daniel E. Bunker
deb37 at columbia.edu
Thu Apr 7 23:19:26 CEST 2005
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
More information about the R-help
mailing list