2017-06-17 84 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语句作为分配的要求。 –