[R] Help with Book example of Matrix application
David Winsemius
dwinsemius at comcast.net
Mon Apr 9 18:52:14 CEST 2012
On Apr 9, 2012, at 12:32 PM, James Lenihan wrote:
> I found this example in an Introductory R book in the chapter on
> Matrices and
> Arrays
>
> The array is
>> m
> [,1] [,2] [,3] [,4] [,5]
> [1,] 0 12 13 8 20
> [2,] 12 0 15 28 88
> [3,] 13 15 0 6 9
> [4,] 8 28 6 0 33
> [5,] 20 88 9 33 0
>
> The code is
>
> #returns the minimum value of d[i,j], i !=j and the row attaining
> #the minimum, for square symmetric d; no special policy on ties
Would you consider a more compact operation? That code seems very unR-
ish.
min( m[row(m) != col(m)] )
#[1] 6
which(m == min( m[row(m) != col(m)] ), arr.ind=TRUE)
#
row col
[1,] 4 3
[2,] 3 4
-------------------
c(min= min( m[row(m) != col(m)] ),
which(m == min( m[row(m) != col(m)] ), arr.ind=TRUE)[1,])
########
min row col
6 4 3
I suppose the question could be how to debug that code, in which case
you should be manually "stepping through" it to see what the values
are during the implicit loop.
> mind <- function(d) {
> n <- nrow(d)
> # add a column to identify row number for apply()
> dd <- cbind(d,1:n)
> wmins <- apply(dd[-n,],1,imin)
> # wins will be 2 X n, 1st row being indices and 2nd being values
> i <- which.min(wmins[2,])
> j <- wmins[1,i]
> return(c(d[i,j],i,j))
> }
>
> #this finds the location, value of the minimum in a row x
> imin <- function(x) {
> lx <- length(x)
> i <- x[lx] # original row number
> j <-which.min(x[(x+1):(lx-1)])
> k <- i+j
> return(c(k,x[k]))
> }
> The result s/b
> [1] 6 3 4
>
> I am getting:
>
> Warning messages:
> 1: In (x + 1):(lx - 1) :
> numerical expression has 6 elements: only the first used
> 2: In (x + 1):(lx - 1) :
> numerical expression has 6 elements: only the first used
> 3: In (x + 1):(lx - 1) :
> numerical expression has 6 elements: only the first used
> 4: In (x + 1):(lx - 1) :
> numerical expression has 6 elements: only the first used
>
> I have check my typing a number of times.
>
> Does anyone see an error?
>
> Thanks,
>
> Jim L.
> [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
David Winsemius, MD
West Hartford, CT
More information about the R-help
mailing list