Hey all,
I am trying to generate a number of vectors with string combinations. The
below code solves my initial problem, however I would prefer not hardcoding
the positions of the 'objects' as in the future the number of 'objects'
could increase. Is there a way to loop over these objects and generate the
same output? The same goes for the 'maxspacer'.
Thanks a whole bunch!
Bart
code:
objects<-c('OCT','ASS','SUP')
maxspacer<-c(2,3)
for(x in 0:maxspacer[1]){
for(y in 0:maxspacer[2]){
combo<-c(objects[1],rep('',x),objects[2],rep('',y),objects[3])
print(combo)
}
}
--
View this message in context: http://r.789695.n4.nabble.com/Generate-combination-of-strings-tp4552952p4552952.html
Sent from the R help mailing list archive at Nabble.com.
Generate combination of strings
3 messages · Bart6114, Petr Savicky
On Thu, Apr 12, 2012 at 01:14:27PM -0700, Bart6114 wrote:
Hey all,
I am trying to generate a number of vectors with string combinations. The
below code solves my initial problem, however I would prefer not hardcoding
the positions of the 'objects' as in the future the number of 'objects'
could increase. Is there a way to loop over these objects and generate the
same output? The same goes for the 'maxspacer'.
Thanks a whole bunch!
Bart
code:
objects<-c('OCT','ASS','SUP')
maxspacer<-c(2,3)
for(x in 0:maxspacer[1]){
for(y in 0:maxspacer[2]){
combo<-c(objects[1],rep('',x),objects[2],rep('',y),objects[3])
print(combo)
}
}
Hi.
Try the following.
objects<-c('OCT','ASS','SUP')
maxspacer<-c(2,3)
expand <- function(obj, sp)
{
i <- cumsum(c(1, sp+1))
x <- rep("", times=max(i))
x[i] <- obj
x
}
lstsp <- lapply(maxspacer, function(x) 0:x)
spacing <- as.matrix(rev(expand.grid(rev(lstsp))))
for (i in seq.int(length=nrow(spacing))) {
print(expand(objects, spacing[i,]))
}
[1] "OCT" "ASS" "SUP"
[1] "OCT" "ASS" "" "SUP"
[1] "OCT" "ASS" "" "" "SUP"
[1] "OCT" "ASS" "" "" "" "SUP"
[1] "OCT" "" "ASS" "SUP"
[1] "OCT" "" "ASS" "" "SUP"
[1] "OCT" "" "ASS" "" "" "SUP"
[1] "OCT" "" "ASS" "" "" "" "SUP"
[1] "OCT" "" "" "ASS" "SUP"
[1] "OCT" "" "" "ASS" "" "SUP"
[1] "OCT" "" "" "ASS" "" "" "SUP"
[1] "OCT" "" "" "ASS" "" "" "" "SUP"
The functions rev() may be removed, if the order of the
output may not be exactly as in your code.
Hope this helps.
Petr Savicky.
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20120413/b6b9718e/attachment.pl>