Una classe base/comune in R è chiamata "dist"
ed è una rappresentazione relativamente efficiente di una matrice di distanza simmetrica. A differenza di un oggetto "matrix"
, tuttavia, non sembra esserci supporto per la manipolazione di un'istanza "dist"
per coppie di indici mediante l'operatore "["
.Come faccio a manipolare/accedere agli elementi di un'istanza della classe "dist" utilizzando il core R?
Ad esempio, il seguente codice restituisce nulla, NULL
, o un errore:
# First, create an example dist object from a matrix
mat1 <- matrix(1:100, 10, 10)
rownames(mat1) <- 1:10
colnames(mat1) <- 1:10
dist1 <- as.dist(mat1)
# Now try to access index features, or index values
names(dist1)
rownames(dist1)
row.names(dist1)
colnames(dist1)
col.names(dist1)
dist1[1, 2]
Nel frattempo, i seguenti comandi funzionano, in un certo senso, ma non rendono più facile per l'accesso/manipolare i particolari valori index-pair:
dist1[1] # R thinks of it as a vector, not a matrix?
attributes(dist1)
attributes(dist1)$Diag <- FALSE
mat2 <- as(dist1, "matrix")
mat2[1, 2] <- 0
una soluzione - che voglio evitare - è prima convertire l'oggetto "dist"
ad un "matrix"
, manipolare quella matrice, e poi riconvertirlo in "dist"
. Ciò vuol dire anche che questa non è una question about how to convert un'istanza "dist"
in una "matrix"
o un'altra classe in cui sono già definiti strumenti di indicizzazione della matrice comuni; poiché questa è stata risolta in diversi modi in different SO question
Esistono strumenti nel pacchetto stats
(o forse un altro pacchetto di base R) indicizzazione dedicato/accedere agli elementi di un'istanza di "dist"
?
Buona Q. Non ho una risposta per te, ma nota che in R una matrice è solo un vettore con dimensioni. Quindi non è sorprendente che 'dist1 [1:20]' e 'dist1 [5] <- 100' e così via funzionino correttamente. Con un po 'di problemi, potresti probabilmente scrivere una versione bidimensionale, sebbene la mia familiarità con l'atomica sia limitata. –