Greetings,

I am attempting to run a function, which produces a vector and  
requires two input variables, across two nested factor levels.  I can  
do this using by(X, list(factor1, factor2), function), however I  
haven't found a simple way to extract the list output into an  
organized vector form.  I can do this using nested loops but it isn't  
exactly an optimal approach.

Thank you for any and all suggestions.  Jon

# example data frame
testDF<-data.frame(
	x=rnorm(12),
	y=rnorm(12),
	f1=gl(3,4),
	f2=gl(2,2,12))

# example function [trivial]
testFun<-function(x){
	X<-abs(x[,1]);
	Y<-abs(x[,2]);
	as.numeric(	paste(round(X), round(Y), sep='.'))
	}

# apply by factor levels but hard to extract values
by(testDF[,1:2], list(testDF$f1, testDF$f2), testFun)

# Loop works, but not efficient for large datasets
testDF$value<-NA
for(i in levels(testDF$f1)){
	for(j in levels(testDF$f2)){
		testDF[testDF$f1==i & testDF$f2==j,]$value<-testFun(testDF[testDF 
$f1==i & testDF$f2==j,1:2])
		}
	}
testDF
sessionInfo()
#R version 2.9.1 Patched (2009-08-07 r49093)
#i386-apple-darwin8.11.1
#
#locale:
#en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8
#
#attached base packages:
#[1] stats     graphics  grDevices utils     datasets  methods   base


Jon Loehrke
Graduate Research Assistant
Department of Fisheries Oceanography
School for Marine Science and Technology
University of Massachusetts
200 Mill Road, Suite 325
Fairhaven, MA 02719
jloehrke@umassd.edu
T 508-910-6393
F 508-910-6396


	[[alternative HTML version deleted]]


