You can put the dataframes in a list and then use 'combn' to determine the possible pairwise combinations and then use this in an lapply to compute the products which is also in a list:
> > X.alleles <- c(1,5,6,7,8) > X.Freq <- c(0.35, 0.15, 0.05 , 0.10, 0.35) > Loc1 <- cbind( X.alleles,X.Freq) > X <- data.frame(Loc1) > > #creation of data frame Y > > Y.alleles <- c(1,4,6,8) > Y.Freq <- c(0.35, 0.35, 0.10, 0.20 ) > Loc2 <- cbind(Y.alleles, Y.Freq) > Y <- data.frame (Loc2) > > # creation of data frame Z > > Z.alleles <- c(1,4,5,6,8) > Z.Freq <- c(0.35, 0.35, 0.05, 0.05, 0.20) > Loc3 <- cbind(Z.alleles, Z.Freq) > Z <- data.frame (Loc3) > > X X.alleles X.Freq 1 1 0.35 2 5 0.15 3 6 0.05 4 7 0.10 5 8 0.35 > Y Y.alleles Y.Freq 1 1 0.35 2 4 0.35 3 6 0.10 4 8 0.20 > Z Z.alleles Z.Freq 1 1 0.35 2 4 0.35 3 5 0.05 4 6 0.05 5 8 0.20 > # create a list of the dataframes you want to multiply > dfList <- list(X, Y, Z) > # get possible pairwise matches > combo <- combn(length(dfList), 2) > result <- lapply(seq(ncol(combo)), function(.col){ + dfList[[combo[1, .col]]][, 2] %o% dfList[[combo[2, .col]]][, 2] + }) > > result [[1]] [,1] [,2] [,3] [,4] [1,] 0.1225 0.1225 0.035 0.07 [2,] 0.0525 0.0525 0.015 0.03 [3,] 0.0175 0.0175 0.005 0.01 [4,] 0.0350 0.0350 0.010 0.02 [5,] 0.1225 0.1225 0.035 0.07 [[2]] [,1] [,2] [,3] [,4] [,5] [1,] 0.1225 0.1225 0.0175 0.0175 0.07 [2,] 0.0525 0.0525 0.0075 0.0075 0.03 [3,] 0.0175 0.0175 0.0025 0.0025 0.01 [4,] 0.0350 0.0350 0.0050 0.0050 0.02 [5,] 0.1225 0.1225 0.0175 0.0175 0.07 [[3]] [,1] [,2] [,3] [,4] [,5] [1,] 0.1225 0.1225 0.0175 0.0175 0.07 [2,] 0.1225 0.1225 0.0175 0.0175 0.07 [3,] 0.0350 0.0350 0.0050 0.0050 0.02 [4,] 0.0700 0.0700 0.0100 0.0100 0.04 > dfList [[1]] X.alleles X.Freq 1 1 0.35 2 5 0.15 3 6 0.05 4 7 0.10 5 8 0.35 [[2]] Y.alleles Y.Freq 1 1 0.35 2 4 0.35 3 6 0.10 4 8 0.20 [[3]] Z.alleles Z.Freq 1 1 0.35 2 4 0.35 3 5 0.05 4 6 0.05 On 9/20/07, Luke Neraas <[EMAIL PROTECTED]> wrote: > #Hello, > > > #I have three data frames, X,Y and Z with two columns each and different > numbers of rows. > > # creation of data frame X > > X.alleles <- c(1,5,6,7,8) > X.Freq <- c(0.35, 0.15, 0.05 , 0.10, 0.35) > Loc1 <- cbind( X.alleles,X.Freq) > X <- data.frame(Loc1) > > #creation of data frame Y > > Y.alleles <- c(1,4,6,8) > Y.Freq <- c(0.35, 0.35, 0.10, 0.20 ) > Loc2 <- cbind(Y.alleles, Y.Freq) > Y <- data.frame (Loc2) > > # creation of data frame Z > > Z.alleles <- c(1,4,5,6,8) > Z.Freq <- c(0.35, 0.35, 0.05, 0.05, 0.20) > Loc3 <- cbind(Z.alleles, Z.Freq) > Z <- data.frame (Loc3) > > X > Y > Z > > # I want to create a pair wise multiplication for all of the second columns > of my dataframe X,Y and Z > > # Here is a way to get two of the data frames to create a pairwise > multiplication. > > X.Freq_times_Y.Freq<- matrix(Y[,2] %o% X[,2], ncol=1) > X.Freq_times_Y.Freq > > # I would like to create a loop to calculate all possible pairwise > multiplications for the > # second columns of my X,Y, and Z data frames. > # I will be conducting pair wise comparisons for up to 50 different data > frames so I need the code to be > # as flexible as possible > > Any help would be greatly appreciated. > > Thanks in advance > > > Luke Neraas > [EMAIL PROTECTED] > > University of Alaska Fairbanks > School of Fisheries and Ocean Sciences > 11120 Glacier Highway > UAF Fisheries Division > Juneau, AK 99801 > > [[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. > -- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem you are trying to solve? ______________________________________________ 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.