2017-06-17 80 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) 

謝謝!還有一個問題,如果我想讓矩陣中的任何值小於3的值爲3,任何值大於1000的值都會返回爲NA,那麼我應該怎麼做?

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

Thanks!還有一個問題,如果我想讓矩陣中的任何值小於3的值爲3,任何值大於1000的值都會返回爲NA,那麼我應該怎麼做? –

+0

太棒了!顯然,我需要用「if」語句將該信息放入我的函數中。那看起來怎麼樣? –

+0

我明白你的答案。我只需要if語句作爲分配的要求。 –