R:如何进行数据[[k]]计算

R:如何进行数据[[k]]计算,r,frequency,sample,R,Frequency,Sample,我有一个不需要替换的样本数据集,如下所示: 图中显示了每个物种的频率,共有50个数据。c[[k]]如下。 现在我正在尝试Jackknife重采样(不替换)来估计覆盖率,代码如下: data.c <- sapply(1:50, function(k)table(data[,k])) #freq mdata <- sapply(1:50, function(k)sum(data.c[[k]]==1)) True_c <- 1- sum(np*(exp(lchoose(N-dat

我有一个不需要替换的样本数据集,如下所示:

图中显示了每个物种的频率,共有50个数据。c[[k]]如下。 现在我正在尝试Jackknife重采样(不替换)来估计覆盖率,代码如下:

data.c <- sapply(1:50, function(k)table(data[,k])) #freq
mdata <- sapply(1:50, function(k)sum(data.c[[k]]==1)) 
True_c <- 1- sum(np*(exp(lchoose(N-data.c[[k]], i))/exp(lchoose(N,i))))  
##True_c function shows error message##

data.c您需要(至少)共享错误消息。一个可复制的例子(例如,
dput(data.c[1:3])
)的输出会更好。@Roland我编辑了我的描述,谢谢你的建议。
data.c
是一个列表。可以从数值中减去列表(如
N-data.c
)。不清楚您想要实现什么,但您可能需要另一个
sapply
循环。
### without replacement
for (seed in c(99,100)){
  set.seed(seed)
    for (s in c(100,1000)){
      sdata <- rlnorm(s,0,1)
      p <- sdata/sum(sdata)
      gn <- p*s*10
      gn <- round(gn)
      M <-replace(gn, gn==0,1) #or M=gn[gn==0]=1
      N <- sum(M); N
      np <- M/N #new prob
      pop_index = rep(1:s, time=M)
      for (i in c(100,500,1000,5000,N))
        {
        data=replicate(50, sample(pop_index, i, 
                                    replace = FALSE, prob = NULL)) 
        data.c=sapply(1:50, function(k)table(data[,k])) #freq
        mdata=sapply(1:50, function(k)sum(data.c[[k]]==1)) #each group, total freq=1
        True_c <- 1- sum(np*(exp(lchoose(N-data.c, i))/exp(lchoose(N,i))))
        c.hat <- (1-(1-(i/N))*(mdata/i)) #geo
        bias=mean(c.hat)-True_c
        var=var(c.hat)
        cat("sample_size",i,"\n",
            "True_C=",True_c,"\n",
            "bias =",bias,"\n",
            "variance=",var,"\n","\n")
      }
    }
  }