Мой матричный код дает NA? - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь создать матрицу значений из уравнения внутри цикла 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 голосов
/ 12 мая 2018

Вот мое «лучшее предположение», основанное на том, как я интерпретирую код, который вы написали.Я изменю свой ответ, если он не отражает то, что вы пытаетесь сделать.

# 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.
0 голосов
/ 12 мая 2018

Можете ли вы запустить свою функцию в текущей форме?

Проблема в том, что p1, p2 и pBASP - это списки, которые делают этот вызов неудачным:

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

Чтобы запустить его, мне нужно было получить доступ к элементам в списках. Я не знаю, какова цель этой функции, поэтому я сосредоточился только на том, чтобы запустить ее, и получил доступ к i -ому элементу каждого списка:

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

Это генерирует a результат и фактически заполняет коллекцию steal.

Кроме того, есть ли какая-либо конкретная причина для создания p1, p2 и pBASP в виде списков, а не векторов (с использованием функции c()). Если сделать это вектором, это упростит синтаксис доступа к этому:

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