A basic/common class in R is called "dist"
, and is a relatively efficient representation of a symmetric distance matrix. Unlike a "matrix"
object, however, there does not seem to be support for manipulating an "dist"
instance by index pairs using the "["
operator.
For example, the following code returns nothing, NULL
, or an error:
# 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]
Meanwhile, the following commands do work, in some sense, but do not make it any easier to access/manipulate particular index-pair values:
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
A workaround -- that I want to avoid -- is to first convert the "dist"
object to a "matrix"
, manipulate that matrix, and then convert it back to "dist"
. That is also to say, this is not a question about how to convert a "dist"
instance into a "matrix"
, or some other class where common matrix-indexing tools are already defined; since this has been answered in several ways in a different SO question
Are there tools in the stats
package (or perhaps some other core R package) dedicated indexing/accessing elements of an instance of "dist"
?
dist1[1:20]
anddist1[5] <- 100
and so forth work properly. With a little trouble, you could probably write a two-dimensional version, although my familiarity with atomics is limited. – Calipash