Thanks, David for the response.

Unfortunately, that only works for the case where I happen to only want the
last and first month "wrap".
But it doesn't work for any other case, e.g., say I want months start.month
= 4, end.month = 2.
Now
start=4; end=2; year.avg = apply(month.data[, c(start,end)], 1, mean)
would give me just the average of months 4 and 2, when I want the average of
months 4, 5, 1, 2.

I could do an if statement:
start = 4
end = 2
if (end < start ) {
  start.script = paste(start, ":5", sep="")
  end.script = paste("1:", 5-end, sep="")
  final.script = paste("c(",start.script,",",end.script,")", sep="")}
out = apply(month.data[,final.script], 1, mean)

But, alas, final.script is now a string, and it can't be passed that way.

Is there either a way to tell the script that 4:2 does not mean 4,3,2, but
it means 4,5,1,2
or is there a way to pass final.script into the subscript in the apply
command
or am I missing something else?

Thanks again,
Alisa



On Wed, Oct 13, 2010 at 2:23 PM, David Winsemius <dwinsemius@comcast.net>wrote:

>
> On Oct 13, 2010, at 4:10 PM, Alisa Wade wrote:
>
>  Perhaps it is just that I don't even know the correct term to search for,
>> but I can find nothing that explains how to wrap around from the end to a
>> start of a row in a matrix.
>>
>> For example, you have a matrix of 2 years of data, where rows are years,
>> and
>> columns are months.
>> month.data = matrix(c(3,4,6,8,12,90,5,14,22, 8), nrow = 2, ncol=5)
>>
>> I would like to take the average of months 5:1  for each year (for row 1
>> =12.5). However, I am passing the start month (5) and the end month (1) as
>> variables.
>>
>> I would like to do something like
>>
>> year.avg = apply(month.data[, start.month:end.month], MARGIN=1, mean)
>>
>> But that gives me the average of months 1:5. (for row 1 =9.6)
>>
>> I know I could use:
>> apply(month.data[, c(1,5)], 1, mean)
>>
>
> > start=5; end=1; year.avg = apply(month.data[, c(start,end)], 1, mean)
> > year.avg
> [1] 12.5  6.0
>
>
>  but I don't know how to pass start.month, end.month into that format that
>> because paste or sprintf forces them to strings, which are not accepted in
>> a
>> subscript.
>>
>> I have the feeling I am unaware of some obvious trick.
>> Any ideas would be greatly appreciated!
>>
>> *****************************************************
>> Alisa A. Wade
>> Postdoctoral Center Associate
>>
>
>
> David Winsemius, MD
> West Hartford, CT
>
>


-- 
*****************************************************
Alisa A. Wade
Postdoctoral Center Associate
National Center for Ecological Analysis and Synthesis
wade@nceas.ucsb.edu
(406) 529-9722
home email: alisaww@gmail.com

	[[alternative HTML version deleted]]

