Cum se repară „Subscript out of bounds error” [duplicat] (Programare, R)

ALI KHAN a intrebat.

Am un cod R aplicat pe anumite date X și Y, Codul este destul de simplu, dar dă o anumită eroare

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

Poate cineva să mă ajute să o rezolv.

#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

Am prescurtat datele pentru un calcul rapid.

Comentarii

  • există o eroare în linia Yhat <- matrix(,data_len,1). ați comentat linia în care ați definit data_len. puteți să rezolvați mai întâi acest lucru? –  > Por Ujjwal.
  • Am făcut modificări. –  > Por ALI KHAN.
1 răspunsuri
Ujjwal

Nu sunt sigur ce anume încercați să faceți. Dar, eroarea apare atunci când R devine mai mare de 15 (deoarece Cen este o matrice cu doar 15 rânduri). Vă rugăm să verificați aceste linii:

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

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

Creșteți R în pași de câte unu. Când R=16, , Cen[16,] nu este definit,

Comentarii

  • R nu este crescător , este R <- 0 la început, dar totuși este redundant și l-am șters. –  > Por ALI KHAN.
  • R <- R+1; în bucla while –  > Por Ujjwal.
  • ok..ce eroare primești acum? –  > Por Ujjwal.
  • Când execut programul, acesta intră în modul RUN și trebuie să folosesc ESC pentru a-l recupera. –  > Por ALI KHAN.
  • nu schimbați niciodată valoarea k (k=1), deci while (k < length(X)) este o buclă infinită –  > Por Ujjwal.

Tags: