Thank you ahead of time for help with this. I have two matrices X [,1] [,2] [,3] [,4] [,5] [,6] [1,] 660 693.00 726.0 759.00 792.0 825.00 [2,] 548 575.40 602.8 630.20 657.6 685.00 [3,] 676 709.80 743.6 777.40 811.2 845.00 [4,] 763 801.15 839.3 877.45 915.6 953.75 [5,] 768 806.40 844.8 883.20 921.6 960.00 [6,] 692 726.60 761.2 795.80 830.4 865.00 [7,] 657 689.85 722.7 755.55 788.4 821.25 [8,] 630 661.50 693.0 724.50 756.0 787.50 [9,] 748 785.40 822.8 860.20 897.6 935.00 [10,] 680 714.00 748.0 782.00 816.0 850.00 and Y [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1369.00 1396.517 1424.308 1452.372 1480.710 1509.323 [2,] 1521.00 1551.572 1582.448 1613.629 1645.114 1676.903 [3,] 1521.00 1551.572 1582.448 1613.629 1645.114 1676.903 [4,] 1521.00 1551.572 1582.448 1613.629 1645.114 1676.903 [5,] 1600.00 1632.160 1664.640 1697.440 1730.560 1764.000 [6,] 1722.25 1756.867 1791.829 1827.135 1862.786 1898.781 [7,] 1936.00 1974.914 2014.214 2053.902 2093.978 2134.440 [8,] 2025.00 2065.703 2106.810 2148.323 2190.240 2232.563 [9,] 2116.00 2158.532 2201.486 2244.864 2288.666 2332.890 [10,] 2209.00 2253.401 2298.244 2343.528 2389.254 2435.423 Each row (1-10) is an individual and columns 1-6 are treatments to each individual. I need to look at interactions between the two variables X and Y, by rows example 1369 + (660*1369 ^ -1) 1396.517 + (660*1396.517 ^ -1) 1424.308 + (660*1424.308 ^ -1) ... 1369 + (693*1369 ^ -1 1396.517 + (693*1396.517 ^ -1 1424.308 + (693*1424.308 ^ -1 ... etc. so each row would yield 36 numbers. I have the following which works for X/Y, but I need Y+X/Y num.x.col <- length(X[1,]) num.y.col <- length(Y[1,]) num.rows <- length(X[,1]) Z <- matrix(nrow=num.rows, ncol=num.x.col*num.y.col) for( i in 1:num.rows) { Z[i,] <- as.vector(X[i,] %*% t(Y[i,])^-1 ) } Any help with making this be Y + X/Y would be appreciated. -- Keith Cox, Ph.D. Sitka Sound Science Center Fisheries Biologist P.O. Box 464 Sitka, Alaska, 99835 907 752-0563 marlinkcox@gmail.com [[alternative HTML version deleted]]
Hello Keith, Based on what you have done, please try this: M<-matrix(nrow=num.rows, ncol=num.x.col*num.y.col) for( i in 1:num.rows){M[i,]<-rep(Y[i,], each=num.y.col)} Z<-Z+M not elegant, but works. HTH YH Deng -----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]On Behalf Of Marlin Keith Cox Sent: February 19, 2008 2:07 PM To: r-help at r-project.org Subject: [R] addition of matrix Thank you ahead of time for help with this. I have two matrices X [,1] [,2] [,3] [,4] [,5] [,6] [1,] 660 693.00 726.0 759.00 792.0 825.00 [2,] 548 575.40 602.8 630.20 657.6 685.00 [3,] 676 709.80 743.6 777.40 811.2 845.00 [4,] 763 801.15 839.3 877.45 915.6 953.75 [5,] 768 806.40 844.8 883.20 921.6 960.00 [6,] 692 726.60 761.2 795.80 830.4 865.00 [7,] 657 689.85 722.7 755.55 788.4 821.25 [8,] 630 661.50 693.0 724.50 756.0 787.50 [9,] 748 785.40 822.8 860.20 897.6 935.00 [10,] 680 714.00 748.0 782.00 816.0 850.00 and Y [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1369.00 1396.517 1424.308 1452.372 1480.710 1509.323 [2,] 1521.00 1551.572 1582.448 1613.629 1645.114 1676.903 [3,] 1521.00 1551.572 1582.448 1613.629 1645.114 1676.903 [4,] 1521.00 1551.572 1582.448 1613.629 1645.114 1676.903 [5,] 1600.00 1632.160 1664.640 1697.440 1730.560 1764.000 [6,] 1722.25 1756.867 1791.829 1827.135 1862.786 1898.781 [7,] 1936.00 1974.914 2014.214 2053.902 2093.978 2134.440 [8,] 2025.00 2065.703 2106.810 2148.323 2190.240 2232.563 [9,] 2116.00 2158.532 2201.486 2244.864 2288.666 2332.890 [10,] 2209.00 2253.401 2298.244 2343.528 2389.254 2435.423 Each row (1-10) is an individual and columns 1-6 are treatments to each individual. I need to look at interactions between the two variables X and Y, by rows example 1369 + (660*1369 ^ -1) 1396.517 + (660*1396.517 ^ -1) 1424.308 + (660*1424.308 ^ -1) ... 1369 + (693*1369 ^ -1 1396.517 + (693*1396.517 ^ -1 1424.308 + (693*1424.308 ^ -1 ... etc. so each row would yield 36 numbers. I have the following which works for X/Y, but I need Y+X/Y num.x.col <- length(X[1,]) num.y.col <- length(Y[1,]) num.rows <- length(X[,1]) Z <- matrix(nrow=num.rows, ncol=num.x.col*num.y.col) for( i in 1:num.rows) { Z[i,] <- as.vector(X[i,] %*% t(Y[i,])^-1 ) } Any help with making this be Y + X/Y would be appreciated. -- Keith Cox, Ph.D. Sitka Sound Science Center Fisheries Biologist P.O. Box 464 Sitka, Alaska, 99835 907 752-0563 marlinkcox at gmail.com [[alternative HTML version deleted]] ______________________________________________ R-help at 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.
This is your original problem: f <- function(x, y) as.vector(outer(x, y, "/")) mapply(f, as.data.frame(t(X)), as.data.frame(t(Y))) so just replace "/" with whatever function of two variables you like. See ?outer and be sure your function replacing "/" is vectorizable as noted there. On Feb 19, 2008 2:07 PM, Marlin Keith Cox <marlinkcox at gmail.com> wrote:> Thank you ahead of time for help with this. > > > I have two matrices > > X > > [,1] [,2] [,3] [,4] [,5] [,6] > [1,] 660 693.00 726.0 759.00 792.0 825.00 > [2,] 548 575.40 602.8 630.20 657.6 685.00 > [3,] 676 709.80 743.6 777.40 811.2 845.00 > [4,] 763 801.15 839.3 877.45 915.6 953.75 > [5,] 768 806.40 844.8 883.20 921.6 960.00 > [6,] 692 726.60 761.2 795.80 830.4 865.00 > [7,] 657 689.85 722.7 755.55 788.4 821.25 > [8,] 630 661.50 693.0 724.50 756.0 787.50 > [9,] 748 785.40 822.8 860.20 897.6 935.00 > [10,] 680 714.00 748.0 782.00 816.0 850.00 > > and > > Y > > [,1] [,2] [,3] [,4] [,5] [,6] > [1,] 1369.00 1396.517 1424.308 1452.372 1480.710 1509.323 > [2,] 1521.00 1551.572 1582.448 1613.629 1645.114 1676.903 > [3,] 1521.00 1551.572 1582.448 1613.629 1645.114 1676.903 > [4,] 1521.00 1551.572 1582.448 1613.629 1645.114 1676.903 > [5,] 1600.00 1632.160 1664.640 1697.440 1730.560 1764.000 > [6,] 1722.25 1756.867 1791.829 1827.135 1862.786 1898.781 > [7,] 1936.00 1974.914 2014.214 2053.902 2093.978 2134.440 > [8,] 2025.00 2065.703 2106.810 2148.323 2190.240 2232.563 > [9,] 2116.00 2158.532 2201.486 2244.864 2288.666 2332.890 > [10,] 2209.00 2253.401 2298.244 2343.528 2389.254 2435.423 > > Each row (1-10) is an individual and columns 1-6 are treatments to each > individual. I need to look at interactions between the two variables X and > Y, by rows > > example > 1369 + (660*1369 ^ -1) > 1396.517 + (660*1396.517 ^ -1) > 1424.308 + (660*1424.308 ^ -1) > > ... > 1369 + (693*1369 ^ -1 > 1396.517 + (693*1396.517 ^ -1 > 1424.308 + (693*1424.308 ^ -1 > ... > etc. > > so each row would yield 36 numbers. > > I have the following which works for X/Y, but I need Y+X/Y > > num.x.col <- length(X[1,]) > num.y.col <- length(Y[1,]) > num.rows <- length(X[,1]) > > Z <- matrix(nrow=num.rows, ncol=num.x.col*num.y.col) > > for( i in 1:num.rows) { > Z[i,] <- as.vector(X[i,] %*% t(Y[i,])^-1 ) > } > > Any help with making this be Y + X/Y would be appreciated. > > -- > Keith Cox, Ph.D. > Sitka Sound Science Center > Fisheries Biologist > P.O. Box 464 > Sitka, Alaska, 99835 > > 907 752-0563 > marlinkcox at gmail.com > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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. >