2017-06-17 11 views
0

delta.vecsigma.vecの値をrequired.replicatesで取得し、それらをpractice1の行列に格納する必要があります。行列を得るための関数にforループを書く

しかし、私はNULLを取得します。

sigma.vec <- c(2,4,6,8,10,12) 
delta.vec <- c(1,2,5,8,10) 

practice1 <- matrix(0, nrow=length(delta.vec), ncol=length(sigma.vec)) 

required.replicates <- function(delta, sigma, z.alpha = 1.959964, z.beta=0.8416212) { 
    for(i in 1:length(delta.vec)) { 
    for(j in 1:length(sigma.vec)) 
     practice1[i,j] <- ceiling((2*(z.alpha + z.beta)^2)* (sigma[j]/delta[i])^2) 
    } 
    } 

practice1 <- required.replicates(delta=delta.vec, sigma=sigma.vec) 
practice1 

答えて

2

これは、より効率的である:

required.replicates <- function (delta, sigma, z.alpha, z.beta) { 
oo <- 1/outer(delta, sigma, "/") 
ceiling(oo^2 * 2 * (z.alpha + z.beta)^2) 
} 

practice1 <- required.replicates(delta.vec, sigma.vec, 1.959964, 0.8416212) 

あなたの元のコードに修正

required.replicates <- function(delta, sigma, z.alpha = 1.959964, z.beta=0.8416212) { 
oo <- matrix(0, nrow=length(delta), ncol=length(sigma)) 
for(i in 1:length(delta)) 
    for(j in 1:length(sigma)) 
    oo[i,j] <- ceiling((2*(z.alpha + z.beta)^2)* (sigma[j]/delta[i])^2) 
return(oo) 
} 

practice1 <- required.replicates(delta.vec, sigma.vec, 1.959964, 0.8416212) 

ありがとう!もう1つの質問ですが、3未満の行列の値に3を、1000以上の値をNAとして返すには、何を追加する必要がありますか?

practice1[practice1 < 3] <- 3 
practice1[practice1 > 1000] <- NA 
practice1 
+0

ありがとうございます!もう1つの質問ですが、3未満の行列の値に3を、1000以上の値をNAとして返すには、何を追加する必要がありますか? –

+0

驚くばかり!どうやら、私は "if"ステートメントを使って関数にその情報を入れる必要があります。どのように見えるだろうか? –

+0

私はあなたの答えを理解しています。私は代入の要件としてifステートメントが必要です。 –

関連する問題