【问题标题】:How to fix "Subscript out of bounds error" [duplicate]如何修复“下标越界错误”[重复]
【发布时间】:2014-10-24 04:40:17
【问题描述】:

我在某些数据 X 和 Y 上应用了 R 代码,代码相当简单,但它给出了一定的错误

"Error in `[<-`(`*tmp*`, R, , value = c(1, 1)) : subscript out of bounds"

谁能帮我解决一下。

#X <- read.table("data1.dat")
#Y <-read.table("data2.dat")

X <- c(1,2,43,1,6,5,44,6.8,7.8,9.8)
Y <- c(1,3,31,26,78,4,5,44,4,6)

length(X)
length(Y)

Rmax <- 15
data_len <- length(X)
Z <- as.matrix(cbind(X,Y))
Cen <- matrix(rnorm(2*Rmax),Rmax,2)
Xe <- as.matrix(cbind(1,X))
w <-  matrix(rnorm(2*Rmax),Rmax,2)
lambda <- matrix(rnorm(1*Rmax),Rmax,1)
U <- matrix(rnorm(1*Rmax),Rmax,1)
gamma <- matrix(rnorm(2*Rmax),Rmax,2)
P_matrix <- 10^3*matrix(rnorm(2*2),2,2)
Yhat <- matrix(,data_len,1)
a1 <- 0
a2 <- 0
a4 <- matrix(rnorm(2),1,2)
a3 <- 0
Pz <- 0
P <- matrix(rnorm(1*Rmax),Rmax,1)
dist <- numeric(Rmax)
r <- 0.04
m3 <- 0
k <- 1

while (k < length(X)){  
 if(k == 1){  
 Cen[1,] <- Z[k,]; U[k,] <- 1; lambda <- matrix(sapply(U,function(x){x/sum

(U)}),Rmax,1); Yhat[k,] <- Xe[k,]%*%(t(w)%*%lambda)

} else {

a1 <- big_V(Z[k,]);a2 <- a2+ big_V(Z[k-1,]);a4 <- a4 + Z[k-1,];a3 <- sum(Z[k,]*a4)

B <- ((k-1)*(a1+1))+a2-(2*a3); Pz <- (k-1)/B

for(i in 1:length(P)){
    P[i] <- ((k-1)*P[i])/((k-2)+(P[i])+(P[i])*(dist(Z[k-1,],Z[k,])))
}
print(k)
for (i in 1:Rmax){
 dist[i] <- abs(sqrt(sum((Z[k,]-Cen[i,])^2)))
}

p1 <- min(dist)
p2 <- which.min(dist)

m1 <- max(P)
m2 <- which.max(P)
m3 <- (p1/r)+(Pz/m1)

if (Pz > m1 & m3 < 1){
Cen[m2,] <- Z[k,]
P[m2] <- Pz
}


for (i in 1:Rmax){
U[i] <- exp(-r*(abs(sqrt(sum((X[k,]-Cen[i,1])^2)))))
}

lambda <- sapply(U, function(x) x/sum(U)) 

P_matrix <- (diag(2)-(t(gamma)%*%lambda%*%Xe[k,]))%*%P_matrix

A <- lambda%*%Xe[k,]
Z1 <- P_matrix%*%t(A)
Z2 <- A%*%P_matrix%*%t(A)
Z3 <- diag(15)+Z2
gamma <- t(Z1%*%solve(Z3))


w_bar <- Xe[1,]%*%t(w)%*%lambda
w <-  w + (gamma*diag(e))

}  
} 
Yhat <- Xe%*%t(w)%*%lambda

我已经缩短了数据以便快速计算。

【问题讨论】:

  • Yhat &lt;- matrix(,data_len,1) 行有错误。您已经注释了定义data_len 的行。你能先解决这个问题吗?
  • 我进行了更改。

标签: r


【解决方案1】:

我不确定你到底想做什么。但是,当R 大于 15 时会发生错误(因为Cen 是一个只有 15 行的矩阵)。请检查以下几行:

Rmax <- 15
Cen <- matrix(rnorm(2*Rmax),Rmax,2)

while (k < length(X)){  
 if(k == 1){  
R <- R+1; 
Cen[R,] <- Z[k,];  **error**

您正在逐步增加R。当R=16Cen[16,]未定义时,

【讨论】:

  • R 没有增加,一开始是 R
  • R &lt;- R+1; 在 while 循环中
  • 好的..你现在遇到什么错误?
  • 当我运行程序时,它会进入 RUN 模式,我必须使用 ESC 将其取回。
  • 你永远不会改变k (k=1) 的值,所以while (k &lt; length(X)) 是一个无限循环
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多