我的矩阵填充代码给了NA?

时间:2018-05-12 02:10:30

标签: r matrix initialization na

我正在尝试从for循环内的方程创建一个值矩阵。我一直在" NA"填写所有指数。如何将y等式中的值放入矩阵steal

set.seed(1234)

row = 10
col = 100
p1 = list(runif(250, 0, 0.250))
p2 = list(runif( 500, 0.250, 0.750))
pBASP = list(runif(1000, 0, 1)) 

steal = matrix(data=NA, nrow=10, ncol=100)
as.data.frame(steal)

y = matrix(data=NA, nrow=10, ncol=100)
as.data.frame(y)

success <- function(p1, p2, pBASP) {

  for(i in 1:row) {  
    for(j in 1:col) {      
      y[i,j] <- (p1/p2) + pBASP

      if(y[i,j] > 0.750){        
        steal[i,j] <- y[i,j]        
      }      
    }  
  }

  return(steal)
}

#plot(y, hy, type="l", lty=2, xlab="y value",
# ylab="Density", main="Batting Average with RISP")

2 个答案:

答案 0 :(得分:0)

您是否能够以当前形式运行您的功能?

问题是,p1p2pBASP都是导致此次调用失败的列表:

y[ i, j ] <- ( p1 / p2 ) + pBASP

要实际运行它,我必须访问列表中的项目。我不知道函数的用途是什么,所以我只专注于让它运行并访问每个列表的i元素:

 y[ i, j ] <- ( p1[[1]][[i]] / p2[[1]][[i]] ) + pBASP[[1]][[i]]

这会生成 a 结果,并实际填充steal集合。

此外,是否有任何特殊原因要创建p1p2pBASP作为列表而不是向量(使用c()函数。)使其成为矢量会简化访问语法:

 y[ i, j ] <- ( p1[i] / p2[i] ) + pBASP[i]

答案 1 :(得分:0)

这是我最好的猜测&#34;基于我如何解释您编写的代码。如果它没有捕获您正在尝试做的事情,我会修改我的回复。

# I'm changing the dimensions of `p1` and `p2` to match the matrices:
p1 <- runif(10,  0, 0.25)
p2 <- runif(100, 0.25, 0.75)
pBASP <- matrix(runif(1000, 0, 1), ncol = 100, nrow = 10)

y <- outer(p1, p2, "/") + pBASP # this creates y without any loops

steal <- y  
steal[steal <= 0.75] <- NA # remove the values of steal that you don't want.