【问题标题】:Write a for loop in a function to get a matrix [closed]在函数中编写一个 for 循环以获取矩阵 [关闭]
【发布时间】:2017-06-17 12:40:24
【问题描述】:

我需要将delta.vecsigma.vec 值通过我的required.replicates 函数并将它们存储在我的practice1 矩阵中。

但我得到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

【问题讨论】:

    标签: r function loops for-loop matrix


    【解决方案1】:

    这样更有效率:

    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
    

    【讨论】:

    • 谢谢!还有一个问题,如果我希望矩阵中小于 3 的任何值都具有 3 的值,并且任何大于 1000 的值都以 NA 的形式返回,我应该添加什么?
    • 太棒了!显然,我需要使用“if”语句将该信息放入我的函数中。看起来怎么样?
    • 我理解你的回答。我只需要 if 语句作为分配的要求。
    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2018-01-16
    • 2017-11-22
    • 2017-09-29
    相关资源
    最近更新 更多