[R] filling the matrix row by row in the order from lower to larger elements

Dimitri Liakhovitski dimitri.liakhovitski at gmail.com
Sun Apr 8 16:26:10 CEST 2012


Sorry, I didn't have time to check the speed, indeed.
However - isn't apply the same as a loop, just hidden?
D.

On Fri, Apr 6, 2012 at 6:59 PM, ilai <keren at math.montana.edu> wrote:
> On Fri, Apr 6, 2012 at 4:02 PM, Dimitri Liakhovitski
> <dimitri.liakhovitski at gmail.com> wrote:
>  This works great:
>
> Really ? surprising given it is the EXACT same for-loop as in your
> original problem with counter "i" replaced by "k" and reorder to
> matrix[!100]<- 0 instead of matrix(0)[i]<- 100
> You didn't even attempt to implement Carl's suggestion to use apply
> family for looping (which I still think is completely unnecessary).
>
> The only logical conclusion is N=nrow(input) was not large enough to
> pose a problem in the first place. In the future please use some brain
> power before waisting ours.
>
> Cheers
>
>>
>> input<-as.matrix(data.frame(a=c(5,1,3,7),b=c(2,6,4,8)))
>> result<-input
>> N<-nrow(input)
>> for (k in 1:N){
>>  foo <- which (input == k,arr.ind=T)
>>  result[k,foo[2]] <-100
>> }
>> result[result !=100]<-0
>>
>> Dimitri
>>
>>
>> On Fri, Apr 6, 2012 at 5:14 PM, Carl Witthoft <carl at witthoft.com> wrote:
>>> I think the OP wants to fill values in an arbitrarily large matrix. Now,
>>> first of all, I'd like to know what his real problem is, since this seems
>>> like a very tedious and unproductive matrix to produce.  But in the
>>> meantime,  since he also left out important information, let's assume the
>>> input matrix is N rows by M columns, and that he wants therefore to end up
>>> with N instances of "100", not counting the original value of 100 that is
>>> one of his ranking values (a bad BAD move IMHO).
>>>
>>> Then either loop or lapply over an equation like (I've expanded things more
>>> than necessary for clarity
>>> result<-inmatrix
>>> for (k in 1:N){
>>> foo <- which (inmatrix == k,arr.ind=T)
>>> result[k,foo[2]] <-100
>>>
>>> }
>>>
>>>
>>>
>>> I maybe missing something but this seems like an indexing problem
>>> which doesn't require a loop at all. Something like this maybe?
>>>
>>> (input<-matrix(c(5,1,3,7,2,6,4,8),nc=2))
>>> output <- matrix(0,max(input),2)
>>> output[input[,1],1] <- 100
>>> output[input[,2],2] <- 100
>>> output
>>>
>>> Cheers
>>>
>>>
>>> On Fri, Apr 6, 2012 at 1:49 PM, Dimitri Liakhovitski
>>> <dimitri.liakhovitski at gmail.com> wrote:
>>>> Hello, everybody!
>>>>
>>>> I have a matrix "input" (see example below) - with all unique entries
>>>> that are actually unique ranks (i.e., start with 1, no ties).
>>>> I want to assign a value of 100 to the first row of the column that
>>>> contains the minimum (i.e., value of 1).
>>>> Then, I want to assign a value of 100 to the second row of the column
>>>> that contains the value of 2, etc.
>>>> The results I am looking for are in "desired.results".
>>>> My code (below) does what I need. But it's using a loop through all
>>>> the rows of my matrix and searches for a matrix element every time.
>>>> My actual matrix is very large. Is there a way to do it more efficiently?
>>>> Thank you very much for the tips!
>>>> Dimitri
>>>>
>>>> input<-as.matrix(data.frame(a=c(5,1,3,7),b=c(2,6,4,8)))
>>>> (input)
>>>> desired.result<-as.matrix(data.frame(a=c(100,0,100,0),b=c(0,100,0,100)))
>>>> (desired.result)
>>>> result<-as.matrix(data.frame(a=c(0,0,0,0),b=c(0,0,0,0)))
>>>> for(i in 1:nrow(input)){ # i<-1
>>>>  mymin<-i
>>>>  mycoords<-which(input==mymin,arr.ind=TRUE)
>>>>  result[i,mycoords[2]]<-100
>>>>  input[mycoords]<-max(input)
>>>> }
>>>> (result)
>>>>
>>> --
>>>
>>> Sent from my Cray XK6
>>> "Quidvis recte factum, quamvis humile, praeclarum."
>>>
>>>
>>> ______________________________________________
>>> 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.
>>
>>
>>
>> --
>> Dimitri Liakhovitski
>> marketfusionanalytics.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.



-- 
Dimitri Liakhovitski
marketfusionanalytics.com



More information about the R-help mailing list