The problem is that the elements to be extracted from Z are not the same,
sort of random actually.
So, using lapply as suggested by Richard works fine here, and I believe that
this will be faster than loop.

But "not making an assignment to the intermediate 'tmp"" is a good point!
Thank you!



On Fri, Feb 5, 2010 at 12:24 AM, David Winsemius <dwinsemius@comcast.net>wrote:

>
> On Feb 4, 2010, at 11:53 PM, Carrie Li wrote:
>
>  Thank you, David
>> Here is an example :
>>
>>
>> Z=matrix(rnorm(20), nrow=4)
>> index=replicate(4, sample(1:5, 3))
>> P=4
>> tmpr=list()
>> for (i in 1:P)
>> {
>>  tmp = Z[i,index[,i]]
>>  tmpr[[i]]=tmp
>> }
>>
>>
>> So, I am trying to pull out the values in Z for each row, but now I only
>> want to pull out the values indexed by the matrix "index"
>> And, since I have large P, so I would like to avoid loop.
>>
>
> My understanding (subject to correction):
>    the notion that loops are inefficient for this sort of activity is a
> misconception. If your count of desired  elements to be extracted from Z are
> always the same,  then a loop is probably reasonably efficient.
>
> You could accelerate the process by not making an assignment to the
> intermediate 'tmp"
>
>  for (i in 1:P) { tmpr[[i]]  <-  Z[i,index[,i]] }
>
>
> -- David.
>
>
>  Any quick way to do this ?
>>
>> Thanks again!!
>>
>> Carrie
>>
>>
>>
>>
>>
>>
>> On Thu, Feb 4, 2010 at 10:39 PM, David Winsemius <dwinsemius@comcast.net>
>> wrote:
>>
>> On Feb 4, 2010, at 9:51 PM, Carrie Li wrote:
>>
>> Dear R-helpers ,
>>
>> I have a simple loop as follows, however, to be more efficient, I would
>> like
>> to use any apply functions (tapply, I suppose)
>> But how can I do this ? I am not very clear about this.
>>
>> # Z is a P * Q matrix
>> # so for each row of Z, I would like to pull out only some of the
>> elements,
>> and save as a separate matrix under a list
>> # index is a vector with length smaller than Q, but the index could be
>> different for each row of Z.
>>
>> An example would help. Sounds like you need a list structure to hold the
>> index and I don't see that you have constructed one.
>>
>>
>> for (i in 1:P)
>> {
>>  tmp = matrix(Z[i, index], nrow=1)
>>
>> Seems as though you would need to "index" in a verb sense (with "i") the
>> index (in a noun sense)  structure. Might be better to call it "idx".
>> Perhaos
>>
>> tmp = matrix(Z[i, index[[i]] ], nrow=1)  # the nrow=1 appears superfluous
>>
>>
>>  tmpr[[i]]=tmp
>> }
>>
>>
>> any help is highly appreciated!!
>>
>> Thank you all
>>
>> Carrie
>>
>>       [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help@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
>> Heritage Laboratories
>> West Hartford, CT
>>
>>
>>
> David Winsemius, MD
> Heritage Laboratories
> West Hartford, CT
>
>

	[[alternative HTML version deleted]]

