Dzień dobry !

W ramach R opracowałem następujący kod:

            k=10
            w_k=rep(1,k)/k
            n_j=rep(0,k)
            
            print(w_k)
            
            data=as.matrix(iris[1:150,-5])
            means=sample(1:dim(data)[1],k,replace=FALSE)
            mu=as.matrix(iris[means,-5])
            sigma=cov(data)
            sigma_list=rep(list(sigma),k)
            
            P_Cj_Xi<-function(Xi,mu,sigma_list=sigma_list){
            k=length(Xi) 
            n_j=rep(0,k) 
            r=lapply(1:k, function(i) r[i]=solve(matrix(unlist(sigma_list[i]),ncol=k)))  
      
# lapply isn't storing the solve(matrix(unlist(sigma_list[i]),ncol=k)) from 1 to k 
# try print(solve(matrix(unlist(sigma_list[i]),ncol=k))) , the inverse 
# is correctly computed. I need to access each of inverses .
                

            }
        # example of run :
        P_Cj_Xi(Xi=data[1,],mu,sigma_list=sigma_list)

sigma_list to lista zawiera k=10 matryc. Wszystkie te macierze są początkowo równe sigma=cov(data). Muszę pętli przez sigma_list i obliczyć odwrotność każdej matrycy na tej liście. Te obliczone matryce odwrotne powinny być przechowywane na innej liście r.

Z poprzednim kodem zazwyczaj otrzymuję ten błąd:

Warning message in r[i] = solve(matrix(unlist(sigma_list[i]), ncol = k)):
"le nombre d'objets à remplacer n'est pas multiple de la taille du remplacement"
Warning message in r[i] = solve(matrix(unlist(sigma_list[i]), ncol = k)):
"le nombre d'objets à remplacer n'est pas multiple de la taille du remplacement"
Warning message in r[i] = solve(matrix(unlist(sigma_list[i]), ncol = k)):
"le nombre d'objets à remplacer n'est pas multiple de la taille du remplacement"
Warning message in r[i] = solve(matrix(unlist(sigma_list[i]), ncol = k)):
"le nombre d'objets à remplacer n'est pas multiple de la taille du remplacement"

Mam nadzieję, że moje pytanie jest jasne. Dziękujemy za pomoc z góry!

r
0
Tou Mou 13 październik 2020, 17:25

1 odpowiedź

Najlepsza odpowiedź

Powinienem utworzyć pustą matrycę z r=matrix(NA,length(Xi),length(Xi)), a potem mogłem powtórzyć r wiele razy =n_clusters

  P_Cj_Xi<-function(Xi,mu,sigma_list=sigma_list,n_clusters=k){
    k=n_clusters
    n_j=rep(0,length(Xi))  
    r=matrix(NA,length(Xi),length(Xi))    
    r=rep(list(r),n_clusters )    
    r=lapply(1:n_clusters , function(i) r[[i]]=solve(matrix(unlist(sigma_list[i]),ncol=length(Xi))))  
    r
            
    #n_j=sapply(1:k, function(i) -1/2*(Xi-mu[i])%*%r[i]%*%(t(Xi-mu[i])))          
    #n_j    
    }
    
    P_Cj_Xi(Xi=data[1,],mu,sigma_list=sigma_list)
0
Tou Mou 13 październik 2020, 14:45