【发布时间】:2014-02-18 14:23:21
【问题描述】:
我正在尝试运行一个更复杂但等于:
A <<- 5
B <<- 5
table <- data.frame(A,B)
backup <- table
test <- function(A,B){
while(A > 0){
r <- runif(1,0,1)
if ((r >= 0)&(r <= 0.5)){
A <- A + 1
B <- B - 1
} else if ((r > 0.5)&(r<=1)){
A <- A - 1
B <- B + 1
}
tab <- cbind(A,B)
table <<- rbind(table,tab)
if (nrow(table) == 10) {
break
} else if ((A > 0) & (nrow(table) != 10)) {
next
} else {if ((A == 0) & (nrow(table != 10)) { #pointing to error here?
A <- 5
B <- 5
table <- backup
next
}
}
}
所以我想要这个函数做的是当表的行数(=函数运行的次数)等于某个值时停止,在本例中为 10。但是 A 不能取值低于 0。如果 A 在表的行数为 10 之前达到 0,则整个过程必须重新开始,输入值与以前相同。
但是,此功能不起作用。我想是因为我使用了多个 next 语句,对吗?
谢谢!
【问题讨论】:
-
next 只适用于最里面的嵌套循环,你认为你需要 next 这里吗?
-
返回
table而不是使用break。这是否符合您的预期?此外,没有缩进的代码很难遵循嵌套在哪里。这可能会帮助你遵循你的逻辑。 -
避免使用
<<-。它在这里没有任何帮助。 -
在我添加评论的那一行中,无法遵循您打算使用的花括号和括号。此外 - 由于您拥有
if(nrow(table)==10),因此您的else没有其他状态,除了 not 10 行,因此无需再次检查该值。