>source

이 코드가 있습니다.

N=5
RowNum <-c(1:N)
Prob <- c(0.5,0.3,0.8,0.2,0.9)
Attempts <- c(rep(0,N))
Succeeded <- c(rep(0,N))
Overall <- data.frame(RowNum,Prob,Attempts,Succeeded) 
set.seed(1)
addone <- function(vec) {
  
  vec$Attempts <- vec$Attempts + 1
  if(runif(1) < vec$Prob) {
    vec$Succeeded <- vec$Succeeded + 1
  } else {
    vec <- addone(vec)
  }
  vec
}
make.new.df <- function(df) {
  for(i in 1:nrow(df)) {
    df[i, ] <- addone(df[i, ])
  }
  df
}
  
  
  df1 <- make.new.df(Overall)
df1

다음은 set.seed (1)를 사용한 출력입니다.

 RowNum Prob Attempts Succeeded
1      1  0.5        1         1
2      2  0.3        4         1
3      3  0.8        3         1
4      4  0.2        2         1
5      5  0.9        1         1

N을 삽입하면이 코드가 N 번 실행되는 루프를 만들고 싶습니다. 예를 들어-N = 100으로 설정하면 출력은 다음과 같아야합니다 (set.seed (1) 사용).

 RowNum Prob Attempts Succeeded
1      1  0.5        100         100
2      2  0.3        400         100
3      3  0.8        300         100
4      4  0.2        200         100
5      5  0.9        100         100

도와 주셔서 감사합니다!

  • 답변 # 1

    재귀 함수를 사용하지 않을 것입니다. N 커집니다. 사용 while 시도 할 수있는 루프 :

    make.new.df <- function(df, success_n) {
      for(i in seq_len(nrow(df))) {
        count <- 0
        prob <- df$Prob[i]
        success <- df$Succeeded[i]
        while (success < success_n) {
          if(runif(1) < prob) success <- success + 1
          count <- count + 1
        }
        df$Succeeded[i] <- success
        df$Attempts[i] <- count
      }
      return(df)
    }
    df1 <- make.new.df(Overall, 10)
    df1
    #  RowNum Prob Attempts Succeeded
    #1      1  0.5       22        10
    #2      2  0.3       37        10
    #3      3  0.8       11        10
    #4      4  0.2       20        10
    #5      5  0.9       11        10
    df1 <- make.new.df(Overall, 100)
    df1
    #  RowNum Prob Attempts Succeeded
    #1      1  0.5      183       100
    #2      2  0.3      379       100
    #3      3  0.8      127       100
    #4      4  0.2      423       100
    #5      5  0.9      111       100
    
    

관련 자료

  • 이전 python 3.x - Minidom의 특정 노드에 getElementsByTagName을 사용하는 방법
  • 다음 asp.net - foreach C # 스마트 기술을 사용하여 다른 목록의 목록에 항목을 추가하는 방법