Diese Frage ähnelt Fragen, die in anderen Sprachen bezüglich Gleitkommafehler gestellt wurden (zB here), aber ich habe keine befriedigende Lösung gefunden.Wie entferne ich Matrizen aus einer Liste, die Duplikate innerhalb eines Gleitkommafehlers sind?
Ich arbeite an einem Projekt, das die Untersuchung von Matrizen mit bestimmten Eigenschaften beinhaltet. Als Teil davon muss ich wissen, wie viele Matrizen in einer Liste einzigartig sind.
D <- as.matrix(read.table("datasource",...))
mat_list <- vector('list',length=length(samples_list))
mat_list <- lapply(1:length(samples_list),function(i) matrix(data=0,nrow(D),ncol(D)))
Diese Liste wird dann auf die Elemente von samples_list
anhand von Berechnungen aus den Daten gefüllt. Nachdem mat_list
ausgefüllt wurde, muss ich Duplikate entfernen. Running
mat_list <- unique(mat_list)
engt die Dinge ziemlich ein wenig; Viele dieser Elemente befinden sich jedoch tatsächlich innerhalb eines Maschinenfehlers voneinander. Die Funktion unique
erlaubt es nicht, Genauigkeit anzugeben, und ich konnte den Quellcode für die Änderung nicht finden.
Eine Idee war ich dies hatte:
ErrorReduction<-function(mat_list, tol=2){
len <- length(mat_list)
diff <- mat_list[[i]]-mat_list[[i+1]]
for(i in 1:len-1){
if(norm(diff,"i")<tol){
mat_list[[i+1]] <- mat_list[i]
}
}
mat_list<-unique(mat_list)
return(mat_list)
}
aber das sieht nur paarweise Unterschiede. Es wäre einfach, aber höchstwahrscheinlich ineffizient, dies mit verschachtelten for
Loops zu tun.
Welche Methoden kennen Sie oder welche Ideen haben Sie, um das Problem zu lösen, Matrizen zu identifizieren und zu entfernen, die sich im Maschinenfehler befinden und Duplikate sind?
Können Sie ein paar Beispiele veröffentlichen, wo Sie die Antwort denken ist "gleich" und "ungleich" und spezifizieren warum? Im Moment haben Sie "Datenquelle", aber niemand sonst. Wir empfehlen die Verwendung von 'dput (mat)'. –