Justin USHIZE RUTIKANGA
2015-Apr-28 06:52 UTC
[R] Limiting state probability for Markov chain
Dear All, I am trying to determine the liming state probability . my_fun<-function(A,b){ for (j in 1:3){ x<-A; while ((sum(x[j,]) ==1) ) { x <- x%*%x; print (x); if ( b%*%x==b) { break; }}} } A<-rbind(c(.5,.3,.2), c(.3,.3,.4),c(.1,.5,.4)) b <- matrix(data=c(1,0,0), nrow=1, ncol=3, byrow=FALSE) my_fun(A,b) I got the following warning 1: In if (b %*% x == b) { : the condition has length > 1 and only the first element will be used 2: In if (b %*% x == b) { : the condition has length > 1 and only the first element will be used 3: In if (b %*% x == b) { : the condition has length > 1 and only the first element will be used 4: In if (b %*% x == b) { : the condition has length > 1 and only the first element will be used 5: In if (b %*% x == b) { : the condition has length > 1 and only the first element will be used 6: In if (b %*% x == b) { : the condition has length > 1 and only the first element will be used 7: In if (b %*% x == b) { : the condition has length > 1 and only the first element will be used 8: In if (b %*% x == b) { : the condition has length > 1 and only the first element will be used 9: In if (b %*% x == b) { : the condition has length > 1 and only the first element will be used your help will be appreciate Best Regard Ushize Rutikanga Justin Student at African Institute for Mathematical Sciences (AIMS) South Africa E-mail:justinushize at aims.ac.za Tel:+27717029144 [[alternative HTML version deleted]]
On 28/04/2015 2:52 AM, Justin USHIZE RUTIKANGA wrote:> Dear All, > > I am trying to determine the liming state probability . > my_fun<-function(A,b){ > for (j in 1:3){ > x<-A; > while ((sum(x[j,]) ==1) ) > { > x <- x%*%x; > print (x); > if ( b%*%x==b) > { > break; > }}} > } > A<-rbind(c(.5,.3,.2), c(.3,.3,.4),c(.1,.5,.4)) > b <- matrix(data=c(1,0,0), nrow=1, ncol=3, byrow=FALSE) > my_fun(A,b) > > I got the following warning > 1: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be usedb has 3 elements; the if() statement wants just a single test. You can use if (all( b %*% x == b )) { ... to avoid this problem, but it's always problematic to compare floating point values for equality: even if your Markov chain is exactly at the limit, rounding may mean those two vectors are not equal. You can do an approximate test using the all.equal() function; see the help page ?all.equal for how to use it in an if() statement. Duncan Murdoch> 2: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > 3: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > 4: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > 5: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > 6: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > 7: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > 8: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > 9: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > your help will be appreciate > > Best Regard > Ushize Rutikanga Justin > Student at African Institute for Mathematical Sciences (AIMS) South Africa > E-mail:justinushize at aims.ac.za > Tel:+27717029144 > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. >
Hi> x<-A%*%A > b%*%x[,1] [,2] [,3] [1,] 0.36 0.34 0.3> b%*%x==b[,1] [,2] [,3] [1,] FALSE FALSE FALSE if function expects scalar as input From help page: cond = A length-one logical vector that is not NA. Conditions of length greater than one are accepted with a warning, but only the first element is used. Other types are coerced to logical if possible, ignoring any class. So before asking a question it is always advisable to consult respective help page together results of actual commands BTW your code resembles C+. If you wanted that R behaves as C+ you'd better to use C+ directly. Cheers Petr> -----Original Message----- > From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Justin > USHIZE RUTIKANGA > Sent: Tuesday, April 28, 2015 8:52 AM > To: r-help at r-project.org > Subject: [R] Limiting state probability for Markov chain > > Dear All, > > I am trying to determine the liming state probability . > my_fun<-function(A,b){ > for (j in 1:3){ > x<-A; > while ((sum(x[j,]) ==1) ) > { > x <- x%*%x; > print (x); > if ( b%*%x==b) > { > break; > }}} > } > A<-rbind(c(.5,.3,.2), c(.3,.3,.4),c(.1,.5,.4)) > b <- matrix(data=c(1,0,0), nrow=1, ncol=3, byrow=FALSE) > my_fun(A,b) > > I got the following warning > 1: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > 2: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > 3: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > 4: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > 5: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > 6: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > 7: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > 8: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > 9: In if (b %*% x == b) { : > the condition has length > 1 and only the first element will be used > your help will be appreciate > > Best Regard > Ushize Rutikanga Justin > Student at African Institute for Mathematical Sciences (AIMS) South > Africa > E-mail:justinushize at aims.ac.za > Tel:+27717029144 > > [[alternative HTML version deleted]] > > ______________________________________________ > 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.________________________________ Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a jsou ur?eny pouze jeho adres?t?m. Jestli?e jste obdr?el(a) tento e-mail omylem, informujte laskav? neprodlen? jeho odes?latele. Obsah tohoto emailu i s p??lohami a jeho kopie vyma?te ze sv?ho syst?mu. Nejste-li zam??len?m adres?tem tohoto emailu, nejste opr?vn?ni tento email jakkoliv u??vat, roz?i?ovat, kop?rovat ?i zve?ej?ovat. Odes?latel e-mailu neodpov?d? za eventu?ln? ?kodu zp?sobenou modifikacemi ?i zpo?d?n?m p?enosu e-mailu. V p??pad?, ?e je tento e-mail sou??st? obchodn?ho jedn?n?: - vyhrazuje si odes?latel pr?vo ukon?it kdykoliv jedn?n? o uzav?en? smlouvy, a to z jak?hokoliv d?vodu i bez uveden? d?vodu. - a obsahuje-li nab?dku, je adres?t opr?vn?n nab?dku bezodkladn? p?ijmout; Odes?latel tohoto e-mailu (nab?dky) vylu?uje p?ijet? nab?dky ze strany p??jemce s dodatkem ?i odchylkou. - trv? odes?latel na tom, ?e p??slu?n? smlouva je uzav?ena teprve v?slovn?m dosa?en?m shody na v?ech jej?ch n?le?itostech. - odes?latel tohoto emailu informuje, ?e nen? opr?vn?n uzav?rat za spole?nost ??dn? smlouvy s v?jimkou p??pad?, kdy k tomu byl p?semn? zmocn?n nebo p?semn? pov??en a takov? pov??en? nebo pln? moc byly adres?tovi tohoto emailu p??padn? osob?, kterou adres?t zastupuje, p?edlo?eny nebo jejich existence je adres?tovi ?i osob? j?m zastoupen? zn?m?. This e-mail and any documents attached to it may be confidential and are intended only for its intended recipients. If you received this e-mail by mistake, please immediately inform its sender. Delete the contents of this e-mail with all attachments and its copies from your system. If you are not the intended recipient of this e-mail, you are not authorized to use, disseminate, copy or disclose this e-mail in any manner. The sender of this e-mail shall not be liable for any possible damage caused by modifications of the e-mail or by delay with transfer of the email. In case that this e-mail forms part of business dealings: - the sender reserves the right to end negotiations about entering into a contract in any time, for any reason, and without stating any reasoning. - if the e-mail contains an offer, the recipient is entitled to immediately accept such offer; The sender of this e-mail (offer) excludes any acceptance of the offer on the part of the recipient containing any amendment or variation. - the sender insists on that the respective contract is concluded only upon an express mutual agreement on all its aspects. - the sender of this e-mail informs that he/she is not authorized to enter into any contracts on behalf of the company except for cases in which he/she is expressly authorized to do so in writing, and such authorization or power of attorney is submitted to the recipient or the person represented by the recipient, or the existence of such authorization is known to the recipient of the person represented by the recipient.
Hi Justin, As already noted, you want to compare two values in your "if" statement. I think you may want to do it like this: my_fun<-function(A,b) { for(j in 1:3) { x<-A; while((sum(x[j,])==1)) { x<-x%*%x; print(x); if(b%*%x[,j]==b[j]) break; } } } Jim Justin USHIZE RUTIKANGA wrote:>> Dear All, >> >> I am trying to determine the liming state probability . >> my_fun<-function(A,b){ >> for (j in 1:3){ >> x<-A; >> while ((sum(x[j,]) ==1) ) >> { >> x <- x%*%x; >> print (x); >> if ( b%*%x==b) >> { >> break; >> }}} >> } >> A<-rbind(c(.5,.3,.2), c(.3,.3,.4),c(.1,.5,.4)) >> b <- matrix(data=c(1,0,0), nrow=1, ncol=3, byrow=FALSE) >> my_fun(A,b) >> >> I got the following warning >> 1: In if (b %*% x == b) { : >> the condition has length > 1 and only the first element will be used >> 2: In if (b %*% x == b) { : >> the condition has length > 1 and only the first element will be used >> 3: In if (b %*% x == b) { : >> the condition has length > 1 and only the first element will be used >> 4: In if (b %*% x == b) { : >> the condition has length > 1 and only the first element will be used >> 5: In if (b %*% x == b) { : >> the condition has length > 1 and only the first element will be used >> 6: In if (b %*% x == b) { : >> the condition has length > 1 and only the first element will be used >> 7: In if (b %*% x == b) { : >> the condition has length > 1 and only the first element will be used >> 8: In if (b %*% x == b) { : >> the condition has length > 1 and only the first element will be used >> 9: In if (b %*% x == b) { : >> the condition has length > 1 and only the first element will be used >> your help will be appreciate >>