Hello I am using R 2.2.0 with Windows XP. I've got a five element list object, each element containing two dataframes of equivalent size. > str(mylist) List of 1 $ data1:List of 2 ..$ data1a :`data.frame': 77 obs. of 63 variables: .. ..$ var1 : num [1:77] 0.41375 0.00056 1.43040 1.43528 0.61730 ... .. ..$ var2 : num [1:77] 1.154 1.686 0.673 0.800 0.760 ... .. ..$ var3 : num [1:77] 1.245 0.575 0.934 0.461 0.757 ... . . . ..$ data1b :`data.frame': 77 obs. of 63 variables: .. ..$ var1 : num [1:77] 1284.59 7.59 1.16 8.66 2646.38 ... .. ..$ var2 : num [1:77] 1.231 1.129 0.427 1.132 0.692 ... .. ..$ var3 : num [1:77] 1.36 0.68 1.39 2.54 1.39 ... . . . $ data2:List of 2 ..$ data2a :`data.frame': 77 obs. of 63 variables: .. ..$ var1 : num [1:77] 0.41375 0.00056 1.43040 1.43528 0.61730 ... .. ..$ var2 : num [1:77] 1.154 1.686 0.673 0.800 0.760 ... .. ..$ var3 : num [1:77] 1.245 0.575 0.934 0.461 0.757 ... . . . ..$ data2b :`data.frame': 77 obs. of 63 variables: .. ..$ var1 : num [1:77] 1284.59 7.59 1.16 8.66 2646.38 ... .. ..$ var2 : num [1:77] 1.231 1.129 0.427 1.132 0.692 ... .. ..$ var3 : num [1:77] 1.36 0.68 1.39 2.54 1.39 ... . . . My goal is to do calculations with corresponding variables (e.g. correlation between var1 of data1a and var1 of data1b) within each list element. I tried to do it with lapply(data, myfunction,...), but I dont know if theres a way to index the two vars within lapply. There is certainly a way to do it by looping, but lapply is much more elegant. Thank you for your help. Christian -- Christian Bieli, project assistant Institute of Social and Preventive Medicine University of Basel, Switzerland Steinengraben 49 CH-4051 Basel Tel.: +41 61 270 22 12 Fax: +41 61 270 22 25 christian.bieli@unibas.ch www.unibas.ch/ispmbs [[alternative HTML version deleted]]
Christian Bieli wrote:> Hello > I am using R 2.2.0 with Windows XP. > I've got a five element list object, each element containing two > dataframes of equivalent size. > > > str(mylist) > List of 1 > $ data1:List of 2 > ..$ data1a :`data.frame': 77 obs. of 63 variables: > .. ..$ var1 : num [1:77] 0.41375 0.00056 1.43040 1.43528 0.61730 ... > .. ..$ var2 : num [1:77] 1.154 1.686 0.673 0.800 0.760 ... > .. ..$ var3 : num [1:77] 1.245 0.575 0.934 0.461 0.757 ... > . > . > . > ..$ data1b :`data.frame': 77 obs. of 63 variables: > .. ..$ var1 : num [1:77] 1284.59 7.59 1.16 8.66 2646.38 ... > .. ..$ var2 : num [1:77] 1.231 1.129 0.427 1.132 0.692 ... > .. ..$ var3 : num [1:77] 1.36 0.68 1.39 2.54 1.39 ... > . > . > . > $ data2:List of 2 > ..$ data2a :`data.frame': 77 obs. of 63 variables: > .. ..$ var1 : num [1:77] 0.41375 0.00056 1.43040 1.43528 0.61730 ... > .. ..$ var2 : num [1:77] 1.154 1.686 0.673 0.800 0.760 ... > .. ..$ var3 : num [1:77] 1.245 0.575 0.934 0.461 0.757 ... > . > . > . > ..$ data2b :`data.frame': 77 obs. of 63 variables: > .. ..$ var1 : num [1:77] 1284.59 7.59 1.16 8.66 2646.38 ... > .. ..$ var2 : num [1:77] 1.231 1.129 0.427 1.132 0.692 ... > .. ..$ var3 : num [1:77] 1.36 0.68 1.39 2.54 1.39 ... > . > . > . > > My goal is to do calculations with corresponding variables (e.g. > correlation between var1 of data1a and var1 of data1b) within each list > element. > I tried to do it with lapply(data, myfunction,...), but I dont know ifWithout having tested: myfunction <- function(x, var){ cor(x[[1]][[var]], x[[2]][[var]]) } lapply(data, myfunction, var="var1") Uwe Ligges> theres a way to index the two vars within lapply. > There is certainly a way to do it by looping, but lapply is much more > elegant. > > Thank you for your help. > Christian >