簡體   English   中英

函數中的多個next語句

[英]multiple next statements in function

我正在嘗試運行一個更復雜但等於的函數:

 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的值。如果在表的行數為10之前A達到0,則整個過程必須以與以前相同的輸入值重新開始。

但是,此功能不起作用。 我認為這是因為我使用了多個next語句,對嗎?

謝謝!

我認為您走在正確的道路上……僅是一些建議

我認為這可以達到您要實現的目標的目的。 我第二次提出Carl的建議,即盡可能避免使用全局運算符'<<-'並將對象作為參數或參數傳遞給函數。 我還贊同賈斯汀的建議,避免使用break命令,而建議巧妙地放置return()調用。 為此,我將10(停止條件)直接放入while循環中。 我將其作為參數n包含在內,以便您可以嘗試不同的停止標准。 希望這可以幫助 :)

test <- function(A,B,n){
  A0 <- A
  B0 <- B
  tab <- data.frame(A,B)
  while(A > 0 & nrow(tab) < n){
    r <- runif(1,0,1)
    if (r <= 0.5){
      A <- A + 1
      B <- B - 1
    } else {
      A <- A - 1
      B <- B + 1
    }

    tab1 <- cbind(A,B)
    tab <- rbind(tab,tab1)

    if(nrow(tab)<n & A==0){
      A<-5
      B<-5
      tab <- cbind(A0,B0)
      names(tab) <- c('A', 'B')
      print(paste('found A==0 in less than ', n, ' iterations', sep=''))
    } 
  }
  return(tab)
}

測試功能...

## running function
A <- 5
B <- 5
testDF <- test(A,B,10)

> testDF 
    A B
1   5 5
2   6 4
3   5 5
4   6 4
5   7 3
6   8 2
7   9 1
8  10 0
9   9 1
10 10 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM