r 中的 For 循环错误
For Loop error in r
我正在尝试使用不是为它编写的代码来模拟马尔可夫链。我的 for 循环不正确,我继续收到错误消息,但我跟踪了括号和语法,但我不能完全指出这个问题。马尔可夫链的矩阵是马尔可夫。我试图通过附加到向量 a 来绘制每个点,但我不认为我的循环正在做我想要的。
我正在使用随机数生成器来测试要进出哪个状态。我知道有更简单的方法来编写这段代码,但我想尝试使用这个基础来使代码正确。如果你能帮我理顺代码并找出正确嵌套循环的方法,我将不胜感激。
x 是我的起点
马尔可夫链概率服从均匀分布
x1 <- runif(100, 1.0, 100)
markov <- matrix(c(.5,.3,.2,.4,.5,.1,.2,.4,.4),nrow=3)
m1 <- markov[1:3]
m2 <- markov[4:6]
m3 <- markov[7:9]
y <- 2
x <- 1
a <- c(1)
while (y <= 100)
{
if(x==1) {
if(x1[y] < m1[1] * 100) {
x <- 1
} else if (x1[y] <= m1[2]*100 + m1[1] * 100 && x1[y] > m1[1] * 100) {
x <- 2
} else {
x <- 3
}
a <- union(x,c(y))
} else if (x==2) {
if(x1[y] < m2[1] * 100) {
x <- 1
} else if (x1[y] <= m2[2]*100 + m2[1] * 100 && x1[y] > m2[1] * 100) {
x <- 2
} else {
x <- 3
}
a <- union(x,c(y))
} else {
if(x1[y] < m3[1] * 100) {
x <- 1
} else if (x1[y] <= m3[2]*100 + m3[1] * 100 && x1[y] > m3[1] * 100) {
x <- 2
} else {
x <- 3
}
a <- union(x,c(y))
y <- y + 1
}
}
plot(c(1:100),a)
您的 y <- y+1
在一个太多的大括号中。它大部分时间都没有被调用。
我想这就是你想要的:
x1 <- runif(100, 1.0, 100)
markov <- matrix(c(.5,.3,.2,.4,.5,.1,.2,.4,.4),nrow=3)
m1 <- markov[1:3]
m2 <- markov[4:6]
m3 <- markov[7:9]
y <- 2
x <- 1
a <- c(1)
aa <- c()
while (y <= 100)
{
if(x==1) {
if(x1[y] < m1[1] * 100) {
x <- 1
} else if (x1[y] <= m1[2]*100 + m1[1] * 100 && x1[y] > m1[1] * 100) {
x <- 2
} else {
x <- 3
}
a <- union(x,c(y))
} else if (x==2) {
if(x1[y] < m2[1] * 100) {
x <- 1
} else if (x1[y] <= m2[2]*100 + m2[1] * 100 && x1[y] > m2[1] * 100) {
x <- 2
} else {
x <- 3
}
a <- union(x,c(y))
} else {
if(x1[y] < m3[1] * 100) {
x <- 1
} else if (x1[y] <= m3[2]*100 + m3[1] * 100 && x1[y] > m3[1] * 100) {
x <- 2
} else {
x <- 3
}
a <- union(x,c(y))
}
aa <- c(aa,x)
y <- y + 1
}
plot(aa)
我正在尝试使用不是为它编写的代码来模拟马尔可夫链。我的 for 循环不正确,我继续收到错误消息,但我跟踪了括号和语法,但我不能完全指出这个问题。马尔可夫链的矩阵是马尔可夫。我试图通过附加到向量 a 来绘制每个点,但我不认为我的循环正在做我想要的。
我正在使用随机数生成器来测试要进出哪个状态。我知道有更简单的方法来编写这段代码,但我想尝试使用这个基础来使代码正确。如果你能帮我理顺代码并找出正确嵌套循环的方法,我将不胜感激。
x 是我的起点 马尔可夫链概率服从均匀分布
x1 <- runif(100, 1.0, 100)
markov <- matrix(c(.5,.3,.2,.4,.5,.1,.2,.4,.4),nrow=3)
m1 <- markov[1:3]
m2 <- markov[4:6]
m3 <- markov[7:9]
y <- 2
x <- 1
a <- c(1)
while (y <= 100)
{
if(x==1) {
if(x1[y] < m1[1] * 100) {
x <- 1
} else if (x1[y] <= m1[2]*100 + m1[1] * 100 && x1[y] > m1[1] * 100) {
x <- 2
} else {
x <- 3
}
a <- union(x,c(y))
} else if (x==2) {
if(x1[y] < m2[1] * 100) {
x <- 1
} else if (x1[y] <= m2[2]*100 + m2[1] * 100 && x1[y] > m2[1] * 100) {
x <- 2
} else {
x <- 3
}
a <- union(x,c(y))
} else {
if(x1[y] < m3[1] * 100) {
x <- 1
} else if (x1[y] <= m3[2]*100 + m3[1] * 100 && x1[y] > m3[1] * 100) {
x <- 2
} else {
x <- 3
}
a <- union(x,c(y))
y <- y + 1
}
}
plot(c(1:100),a)
您的 y <- y+1
在一个太多的大括号中。它大部分时间都没有被调用。
我想这就是你想要的:
x1 <- runif(100, 1.0, 100)
markov <- matrix(c(.5,.3,.2,.4,.5,.1,.2,.4,.4),nrow=3)
m1 <- markov[1:3]
m2 <- markov[4:6]
m3 <- markov[7:9]
y <- 2
x <- 1
a <- c(1)
aa <- c()
while (y <= 100)
{
if(x==1) {
if(x1[y] < m1[1] * 100) {
x <- 1
} else if (x1[y] <= m1[2]*100 + m1[1] * 100 && x1[y] > m1[1] * 100) {
x <- 2
} else {
x <- 3
}
a <- union(x,c(y))
} else if (x==2) {
if(x1[y] < m2[1] * 100) {
x <- 1
} else if (x1[y] <= m2[2]*100 + m2[1] * 100 && x1[y] > m2[1] * 100) {
x <- 2
} else {
x <- 3
}
a <- union(x,c(y))
} else {
if(x1[y] < m3[1] * 100) {
x <- 1
} else if (x1[y] <= m3[2]*100 + m3[1] * 100 && x1[y] > m3[1] * 100) {
x <- 2
} else {
x <- 3
}
a <- union(x,c(y))
}
aa <- c(aa,x)
y <- y + 1
}
plot(aa)