我正在尝试从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")
答案 0 :(得分:0)
您是否能够以当前形式运行您的功能?
问题是,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]
答案 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.