に2つの別々のリストに関数を適用するIサンプル関数を作成し、シミュレートされたデータも利用R
mean_detects<- function(obs,cens) {
detects <- obs[cens==0]
nondetects <- obs[cens==1]
res <- mean(detects)
return(res)
}
mu <-log(1); sigma<- log(3); n_samples=10, n_iterations = 5; p=0.10
dset2 <- function (mu, sigma, n_samples, n_iterations, p) {
X_after <- matrix(NA_real_, nrow = n_iterations, ncol = n_samples)
delta <- matrix(NA_real_, nrow = n_iterations, ncol = n_samples)
lod <- quantile(rlnorm(100000, mu, sigma), p = p)
pct_cens <- numeric(n_iterations)
count <- 1
while(count <= n_iterations) {
X_before <- rlnorm(n_samples, mu, sigma)
X_after[count, ] <- pmax(X_before, lod)
delta [count, ] <- X_before <= lod
pct_cens[count] <- mean(delta[count,])
if (pct_cens [count] > 0 & pct_cens [count] < 1) count <- count + 1 }
ave_detects <- mean_detects(X_after,delta) ## how can I use apply or other functions here?
return(ave_detects)
}
Iはn_iterationsを指定した場合、私は1×10 X_afterマトリックスを有し、1×10デルタを生成するために、次のコードを持っていますマトリックス。次に、このコマンドを使用して、mean_detects関数が正常に機能します。私は、私は2 5×10 X_afterとデルタを持つことになります、5を言うためにn_iterationsを増やすとき
ave_detects <- mean_detects(X_after,delta)
しかし、その後mean_detects機能はもはや動作しません。実際のシミュレーションには何千もの反復があり、速度とメモリも考慮する必要があります。
編集:あなたのコメントに基づいて自分のコードを編集しました。私が作成したmean_detects関数は、X_afterとデルタ行列を同時に使用する例を示すことを意図していました。実際の機能は非常に長いです。だから私はここにそれを掲示しなかったのです。