Re: [R] Write lower half of distance matrix only

From: Martin Maechler <maechler_at_stat.math.ethz.ch>
Date: Sat, 26 Jul 2008 10:01:31 +0200

>>>>> "jh" == jim holtman <jholtman_at_gmail.com>
>>>>>     on Fri, 25 Jul 2008 12:34:49 -0400 writes:
>>>>> "jh" == jim holtman <jholtman_at_gmail.com>
>>>>>     on Fri, 25 Jul 2008 12:34:49 -0400 writes:

    jh> Does this do what you want:

>> x <- matrix(1:25,5)
>> x

    jh>       [,1] [,2] [,3] [,4] [,5]
    jh> [1,]    1    6   11   16   21
    jh> [2,]    2    7   12   17   22
    jh> [3,]    3    8   13   18   23
    jh> [4,]    4    9   14   19   24
    jh> [5,]    5   10   15   20   25

>> x[upper.tri(x)] <- NA
>> write.table(x, na="", row.names=FALSE, col.names=FALSE)
    jh> 1
    jh> 2 7
    jh> 3 8 13
    jh> 4 9 14 19
    jh> 5 10 15 20 25

>>

Yes, but why not use the S / R objects / methods that were exactly written for the purpose?

I strongly recommend to make your matrix into a "dist" object (or a "dissimilarity" object -- the latter from package 'cluster', using function daisy(.)) !

 > m <- matrix(1:25,5); m <- m + t(m); diag(m) <- 0  > (D <- as.dist(m))

    1 2 3 4

 2  8         
 3 14 20      

 4 20 26 32
 5 26 32 38 44

Note that the above does *not* print the all-0 diagonal and so saves printing space.

Martin Maechler, ETH Zurich

    jh> On Fri, Jul 25, 2008 at 8:30 AM, pgseye <prseye_at_gmail.com> wrote:
>>
>> Thanks Jim,
>>
>> The morphometry software I mentioned outputs distance matrices in the
>> format:
>>
>> 0.0000
>> 7.1598 0.0000
>> 8.7241 8.3506 0.0000
>> 9.5217 7.2457 2.5642 0.0000
>>
>> I would have liked to write to a file the same type of matrix in R, to
>> ensure the same data format. Mantel for Windows is optimally setup to take
>> this type of matrix.
>>
>> Thanks
>>
>>
>>
>>
>> jholtman wrote:

    >>> 
    >>> How do you want the lower half written out?  can you give us an
    >>> example of the input matrix and then what you would expect to see on
    >>> the output.  Is it still a matrix with the upper half set to zero/NA?
    >>> Do you want it as a vector?  What is the other program expecting as
    >>> input?
    >>> 
    >>> You need to provide more information so that we can provide suggestions.
    >>> 
    >>> On Fri, Jul 25, 2008 at 7:03 AM, pgseye <prseye_at_gmail.com> wrote:
    >>>> 
    >>>> Hi,
    >>>> 
    >>>> I'm very new to R. I want to know if there is any way to write only the
    >>>> lower half of a distance matrix created in R to a csv file for example.
    >>>> I
    >>>> get the 'cannot coerce class "dist" into a data.frame' message when I
    >>>> try.
    >>>> I have used as.matrix and can write to a file this way, but as a full
    >>>> matrix.
    >>>> 
    >>>> The reason I only want the lower half is that I've been doing some Mantel
    >>>> correlations with distance matrices (of Procrustes distances) generated
    >>>> by
    >>>> other (geometric morphometric) software that are in this format. However,
    >>>> I'm needing to use an alternative such as R to calculate distance
    >>>> matrices
    >>>> of Fourier coefficients which the other software can't do.  So far, the
    >>>> Mantel correlations calculated from these two matrices (with R and also
    >>>> another software (Mantel for Windows)) are slightly different (when they
    >>>> should be exactly the same) and I'm wondering whether it's because the
    >>>> input
    >>>> format is different (ie one full, one half).
    >>>> 
    >>>> Thanks,
    >>>> 
    >>>> Paul
    >>>> 
    >>>> 
    >>>> --
    >>>> View this message in context:
    >>>> http://www.nabble.com/Write-lower-half-of-distance-matrix-only-tp18649556p18649556.html
    >>>> Sent from the R help mailing list archive at Nabble.com.
    >>>> 
    >>>> ______________________________________________
    >>>> R-help_at_r-project.org mailing list
    >>>> https://stat.ethz.ch/mailman/listinfo/r-help
    >>>> PLEASE do read the posting guide
    >>>> http://www.R-project.org/posting-guide.html
    >>>> and provide commented, minimal, self-contained, reproducible code.
    >>>> 
    >>> 
    >>> 
    >>> 
    >>> --
    >>> Jim Holtman
    >>> Cincinnati, OH
    >>> +1 513 646 9390
    >>> 
    >>> What is the problem you are trying to solve?
    >>> 
    >>> ______________________________________________
    >>> R-help_at_r-project.org mailing list
    >>> https://stat.ethz.ch/mailman/listinfo/r-help
    >>> PLEASE do read the posting guide
    >>> http://www.R-project.org/posting-guide.html
    >>> and provide commented, minimal, self-contained, reproducible code.
    >>> 
    >>> 

>>
>> --
>> View this message in context: http://www.nabble.com/Write-lower-half-of-distance-matrix-only-tp18649556p18650794.html
>> Sent from the R help mailing list archive at Nabble.com.
>>
>> ______________________________________________
>> R-help_at_r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
    jh> -- 
    jh> Jim Holtman
    jh> Cincinnati, OH
    jh> +1 513 646 9390

    jh> What is the problem you are trying to solve?

    jh> ______________________________________________
    jh> R-help_at_r-project.org mailing list
    jh> https://stat.ethz.ch/mailman/listinfo/r-help
    jh> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html     jh> and provide commented, minimal, self-contained, reproducible code.

R-help_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Sat 26 Jul 2008 - 08:08:44 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Sat 26 Jul 2008 - 08:32:30 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive