My initial response was buggy and also used a deprecated function.
Also, it seems possible that one may want to rule out any strings where the
same state appears consecutively.
I say that such a string has a repeat.
myExpand <- function(v, n) {
do.call(tidyr::expand_grid, replicate(n, v, simplify = FALSE))
}
no_repeat <- function(s) {
v <- unlist(strsplit(s, NULL))
sum(v[-1]==v[-length(v)]) == 0
}
f <- function(states, nsteps, first, last, rm_repeat=TRUE) {
if (nsteps < 3) stop("nsteps must be at least 3")
out <- paste(first,
myExpand(states, nsteps-2) |>
apply(MAR=1, \(x) paste(x, collapse="")),
last, sep="")
if (rm_repeat) {
ok <- sapply(out, no_repeat)
out <- out[ok]
}
out
}
f(LETTERS[1:5],4,"B","E")
# [1] "BABE" "BACE" "BADE" "BCAE"
"BCBE" "BCDE" "BDAE" "BDBE"
"BDCE"
"BEAE" "BEBE" "BECE" "BEDE"
On Mon, Sep 4, 2023 at 10:33?PM Bert Gunter <bgunter.4567 at gmail.com>
wrote:
> Sorry, my last line should have read:
>
> If neither this nor any of the other suggestions is what is desired, I
> think the OP will have to clarify his query.
>
> Bert
>
> On Mon, Sep 4, 2023 at 12:31?PM Bert Gunter <bgunter.4567 at
gmail.com>
> wrote:
>
>> I think there may be some uncertainty here about what the OP requested.
>> My interpretation is:
>>
>> n different times
>> k different states
>> Any state can appear at any time in the vector of times and can be
>> repeated
>> Initial and final states are given
>>
>> So modifying Tim's expand.grid() solution a bit yields:
>>
>> g <- function(ntimes, states, init, final){
>> ## ntimes: integer, number of unique times
>> ## states: vector of unique states
>> ## init: initial state
>> ## final: final state
>> do.call(paste0,c(init,expand.grid(rep(list(states), ntimes-2)), final))
>> }
>>
>> e.g.
>>
>> > g(4, LETTERS[1:5], "B", "D")
>> [1] "BAAD" "BBAD" "BCAD"
"BDAD" "BEAD" "BABD" "BBBD"
"BCBD"
>> [9] "BDBD" "BEBD" "BACD"
"BBCD" "BCCD" "BDCD" "BECD"
"BADD"
>> [17] "BBDD" "BCDD" "BDDD"
"BEDD" "BAED" "BBED" "BCED"
"BDED"
>> [25] "BEED"
>>
>> If neither this nor any of the other suggestions is not what is
desired,
>> I think the OP will have to clarify his query.
>>
>> Cheers,
>> Bert
>>
>> On Mon, Sep 4, 2023 at 9:25?AM Ebert,Timothy Aaron <tebert at
ufl.edu>
>> wrote:
>>
>>> Does this work for you?
>>>
>>> t0<-t1<-t2<-LETTERS[1:5]
>>> al2<-expand.grid(t0, t1, t2)
>>> al3<-paste(al2$Var1, al2$Var2, al2$Var3)
>>> al4 <- gsub(" ", "", al3)
>>> head(al3)
>>>
>>> Tim
>>>
>>> -----Original Message-----
>>> From: R-help <r-help-bounces at r-project.org> On Behalf Of
Eric Berger
>>> Sent: Monday, September 4, 2023 10:17 AM
>>> To: Christofer Bogaso <bogaso.christofer at gmail.com>
>>> Cc: r-help <r-help at r-project.org>
>>> Subject: Re: [R] Finding combination of states
>>>
>>> [External Email]
>>>
>>> The function purrr::cross() can help you with this. For example:
>>>
>>> f <- function(states, nsteps, first, last) {
>>> paste(first, unlist(lapply(purrr::cross(rep(list(v),nsteps-2)),
>>> \(x) paste(unlist(x), collapse=""))), last,
sep="") } f(LETTERS[1:5], 3,
>>> "B", "E") [1] "BAE" "BBE"
"BCE" "BDE" "BEE"
>>>
>>> HTH,
>>> Eric
>>>
>>>
>>> On Mon, Sep 4, 2023 at 3:42?PM Christofer Bogaso <
>>> bogaso.christofer at gmail.com> wrote:
>>> >
>>> > Let say I have 3 time points.as T0, T1, and T2.(number of such
time
>>> > points can be arbitrary) In each time point, an object can be
any of 5
>>> > states, A, B, C, D, E (number of such states can be arbitrary)
>>> >
>>> > I need to find all possible ways, how that object starting
with state
>>> > B (say) at time T0, can be on state E (example) in time T2
>>> >
>>> > For example one possibility is BAE etc.
>>> >
>>> > Is there any function available with R, that can give me a
vector of
>>> > such possibilities for arbitrary number of states, time, and
for a
>>> > given initial and final (desired) states?
>>> >
>>> > ANy pointer will be very appreciated.
>>> >
>>> > Thanks for your time.
>>> >
>>> > ______________________________________________
>>> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and
more, see
>>> > https://stat/
>>> >
.ethz.ch%2Fmailman%2Flistinfo%2Fr-help&data=05%7C01%7Ctebert%40ufl.edu
>>> >
%7C25cee5ce26a8423daaa508dbad51c402%7C0d4da0f84a314d76ace60a62331e1b84
>>> >
%7C0%7C0%7C638294338934034595%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAw
>>> >
MDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sda
>>> >
ta=TM4jGF39Gy3PH0T3nnQpT%2BLogkVxifv%2Fudv9hWPwbss%3D&reserved=0
>>> > PLEASE do read the posting guide
>>> > http://www.r/
>>> >
-project.org%2Fposting-guide.html&data=05%7C01%7Ctebert%40ufl.edu%7C25
>>> >
cee5ce26a8423daaa508dbad51c402%7C0d4da0f84a314d76ace60a62331e1b84%7C0%
>>> >
7C0%7C638294338934034595%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiL
>>> >
CJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=5n
>>> > PTLmsz0lOz47t41u578t9oI0i7BOgIX53yx8CesLs%3D&reserved=0
>>> > and provide commented, minimal, self-contained, reproducible
code.
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more,
see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.r-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>> ______________________________________________
>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more,
see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>
[[alternative HTML version deleted]]