0

我确信这是一个简单的问题。但我是编程新手,所以我很挣扎。我认为我想要完成的工作应该从代码中非常清楚。本质上,我想生成一个长度为 i 的随机数向量,检查是否有少于 i 个唯一数。我想多次这样做作为一种模拟。当我这样做时,我手动使用以下代码:

experiment<- function() {
          ab <- rdunif(i, 1, 365)
          ab <- data.frame(ab)
          count <- uniqueN(ab)
          if (count < i)
            return(1)
          else
            return(0)
        }
                
        vector <- replicate(10, experiment(), simplify=FALSE)
        sum <- sum(as.data.frame((vector)))
        probability <- sum/(10)

它工作正常。但我需要运行这个模拟 40 次,我宁愿不手动进行。但是,我似乎无法为我工作,我无法弄清楚我做错了什么:

i<-10:50
    experiment<- function(i) {
      ab <- rdunif(i, 1, 365)
      ab <- data.frame(ab)
      count <- uniqueN(ab)
      if (count < i)
        return(1)
      else
        return(0)
    }
    
    complete <- function(i) {
    
    vector <- replicate(10, experiment(i), simplify=FALSE)
    sum <- sum(as.data.frame((vector)))
    probability <- sum/(10)
    
    return(probability)
    }
    
    sapply(i, complete(i), simplify=FALSE)

这是我目前遇到的错误:match.fun(FUN) 中的错误:'complete(i)' is not a function, character or symbol 另外:警告消息:

1: In if (count < i) return(1) else return(0) :
  the condition has length > 1 and only the first element will be used
2: In if (count < i) return(1) else return(0) :
  the condition has length > 1 and only the first element will be used
3: In if (count < i) return(1) else return(0) :
  the condition has length > 1 and only the first element will be used
4: In if (count < i) return(1) else return(0) :
  the condition has length > 1 and only the first element will be used
5: In if (count < i) return(1) else return(0) :
  the condition has length > 1 and only the first element will be used
6: In if (count < i) return(1) else return(0) :
  the condition has length > 1 and only the first element will be used
7: In if (count < i) return(1) else return(0) :
  the condition has length > 1 and only the first element will be used
8: In if (count < i) return(1) else return(0) :
  the condition has length > 1 and only the first element will be used
9: In if (count < i) return(1) else return(0) :
  the condition has length > 1 and only the first element will be used
10: In if (count < i) return(1) else return(0) :
  the condition has length > 1 and only the first element will be used
4

1 回答 1

1

我想到了:

    experiment<- function(i) {
  ab <- rdunif(i, 1, 365)
  count <- length(unique(ab))
  if (count < i) return(1)
  else return(0)
}

i <- 10:50

replication <- function(i) {
  replicate(100, experiment(i))
}

data<- sapply(i, replication)

colMeans(data)
于 2020-10-15T16:59:10.083 回答