Vectorized Version of outer

Usage

v_outer(x, FUN, ...)
"v_outer"(x, FUN, ...)
"v_outer"(x, FUN, ...)
"v_outer"(x, FUN, ...)

Arguments

x
A matrix, dataframe or equal length list of vectors.
FUN
A vectorized function.
...
Other arguments passed to the function supplied to FUN.

Value

Returns a matrix with the vectorized outer function.

Description

Vectorized outer.

Examples

#|------------------------------------------------------| #| SETTING UP VARIOUS FUNCTIONS THAT WILL BE USED | #|------------------------------------------------------| pooled_sd <- function(x, y) { n1 <- length(x) n2 <- length(y) s1 <- sd(x) s2 <- sd(y) sqrt(((n1-1)*s1 + (n2-1)*s2)/((n1-1) + (n2-1))) } ## Effect Size: Cohen's d cohens_d <- function(x, y) { (mean(y) - mean(x))/pooled_sd(x, y) } ## Euclidean Distance euc_dist <- function(x,y) sqrt(sum((x - y) ^ 2)) ## Cosine similarity cos_sim <- function(x, y) x %*% y / sqrt(x%*%x * y%*%y) sum2 <- function(x, y) sum(x, y) arbitrary <- function(x, y) round(sqrt(sum(x)) - sum(y), digits=1) #--------------------------------------------------------# ## A data.frame v_outer(mtcars, cor)
mpg cyl disp hp drat wt qsec vs am gear carb mpg 1.000 -0.852 -0.848 -0.776 0.681 -0.868 0.419 0.664 0.600 0.480 -0.551 cyl -0.852 1.000 0.902 0.832 -0.700 0.782 -0.591 -0.811 -0.523 -0.493 0.527 disp -0.848 0.902 1.000 0.791 -0.710 0.888 -0.434 -0.710 -0.591 -0.556 0.395 hp -0.776 0.832 0.791 1.000 -0.449 0.659 -0.708 -0.723 -0.243 -0.126 0.750 drat 0.681 -0.700 -0.710 -0.449 1.000 -0.712 0.091 0.440 0.713 0.700 -0.091 wt -0.868 0.782 0.888 0.659 -0.712 1.000 -0.175 -0.555 -0.692 -0.583 0.428 qsec 0.419 -0.591 -0.434 -0.708 0.091 -0.175 1.000 0.745 -0.230 -0.213 -0.656 vs 0.664 -0.811 -0.710 -0.723 0.440 -0.555 0.745 1.000 0.168 0.206 -0.570 am 0.600 -0.523 -0.591 -0.243 0.713 -0.692 -0.230 0.168 1.000 0.794 0.058 gear 0.480 -0.493 -0.556 -0.126 0.700 -0.583 -0.213 0.206 0.794 1.000 0.274 carb -0.551 0.527 0.395 0.750 -0.091 0.428 -0.656 -0.570 0.058 0.274 1.000
v_outer(mtcars, pooled_sd)
mpg cyl disp hp drat wt qsec vs am gear carb mpg 2.455 1.976 8.061 6.107 1.811 1.872 1.977 1.807 1.806 1.839 1.955 cyl 1.976 1.336 7.929 5.931 1.077 1.176 1.337 1.070 1.069 1.123 1.304 disp 8.061 7.929 11.133 9.811 7.889 7.903 7.929 7.888 7.888 7.895 7.923 hp 6.107 5.931 9.811 8.280 5.878 5.897 5.931 5.877 5.876 5.886 5.924 drat 1.811 1.077 7.889 5.878 0.731 0.870 1.077 0.721 0.719 0.798 1.037 wt 1.872 1.176 7.903 5.897 0.870 0.989 1.176 0.861 0.859 0.926 1.139 qsec 1.977 1.337 7.929 5.931 1.077 1.176 1.337 1.070 1.069 1.124 1.304 vs 1.807 1.070 7.888 5.877 0.721 0.861 1.070 0.710 0.708 0.788 1.029 am 1.806 1.069 7.888 5.876 0.719 0.859 1.069 0.708 0.706 0.786 1.028 gear 1.839 1.123 7.895 5.886 0.798 0.926 1.124 0.788 0.786 0.859 1.085 carb 1.955 1.304 7.923 5.924 1.037 1.139 1.304 1.029 1.028 1.085 1.271
v_outer(mtcars[, 1:7], euc_dist)
mpg cyl disp hp drat wt qsec mpg 0.000 89.326 1391.495 824.375 98.512 102.877 33.261 cyl 89.326 0.000 1441.252 878.177 19.079 18.058 68.311 disp 1391.495 1441.252 0.000 656.640 1459.404 1458.014 1390.078 hp 824.375 878.177 656.640 0.000 895.520 895.374 826.067 drat 98.512 19.079 1459.404 895.520 0.000 8.140 81.255 wt 102.877 18.058 1458.014 895.374 8.140 0.000 83.655 qsec 33.261 68.311 1390.078 826.067 81.255 83.655 0.000
v_outer(mtcars[, 1:7], sum2)
mpg cyl disp hp drat wt qsec mpg 1285.800 840.900 8026.000 5336.900 757.990 745.852 1214.060 cyl 840.900 396.000 7581.100 4892.000 313.090 300.952 769.160 disp 8026.000 7581.100 14766.200 12077.100 7498.190 7486.052 7954.260 hp 5336.900 4892.000 12077.100 9388.000 4809.090 4796.952 5265.160 drat 757.990 313.090 7498.190 4809.090 230.180 218.042 686.250 wt 745.852 300.952 7486.052 4796.952 218.042 205.904 674.112 qsec 1214.060 769.160 7954.260 5265.160 686.250 674.112 1142.320
v_outer(mtcars[, 1:7], arbitrary)
mpg cyl disp hp drat wt qsec mpg -617.5 -172.6 -7357.7 -4668.6 -89.7 -77.6 -545.8 cyl -628.8 -183.9 -7369.0 -4679.9 -101.0 -88.9 -557.1 disp -557.0 -112.1 -7297.2 -4608.1 -29.2 -17.0 -485.2 hp -574.4 -129.5 -7314.6 -4625.5 -46.6 -34.4 -502.6 drat -632.2 -187.3 -7372.4 -4683.3 -104.4 -92.2 -560.4 wt -632.8 -187.9 -7373.0 -4683.9 -104.9 -92.8 -561.0 qsec -619.0 -174.1 -7359.2 -4670.1 -91.2 -79.1 -547.3
## mtcars as a list mtcars2 <- lapply(mtcars[, 1:7], "[") v_outer(mtcars2, cor)
mpg cyl disp hp drat wt qsec mpg 1.000 -0.852 -0.848 -0.776 0.681 -0.868 0.419 cyl -0.852 1.000 0.902 0.832 -0.700 0.782 -0.591 disp -0.848 0.902 1.000 0.791 -0.710 0.888 -0.434 hp -0.776 0.832 0.791 1.000 -0.449 0.659 -0.708 drat 0.681 -0.700 -0.710 -0.449 1.000 -0.712 0.091 wt -0.868 0.782 0.888 0.659 -0.712 1.000 -0.175 qsec 0.419 -0.591 -0.434 -0.708 0.091 -0.175 1.000
v_outer(mtcars2, cor, method = "spearman")
mpg cyl disp hp drat wt qsec mpg 1.000 -0.911 -0.909 -0.895 0.651 -0.886 0.467 cyl -0.911 1.000 0.928 0.902 -0.679 0.858 -0.572 disp -0.909 0.928 1.000 0.851 -0.684 0.898 -0.460 hp -0.895 0.902 0.851 1.000 -0.520 0.775 -0.667 drat 0.651 -0.679 -0.684 -0.520 1.000 -0.750 0.092 wt -0.886 0.858 0.898 0.775 -0.750 1.000 -0.225 qsec 0.467 -0.572 -0.460 -0.667 0.092 -0.225 1.000
v_outer(mtcars2, pooled_sd)
mpg cyl disp hp drat wt qsec mpg 2.455 1.976 8.061 6.107 1.811 1.872 1.977 cyl 1.976 1.336 7.929 5.931 1.077 1.176 1.337 disp 8.061 7.929 11.133 9.811 7.889 7.903 7.929 hp 6.107 5.931 9.811 8.280 5.878 5.897 5.931 drat 1.811 1.077 7.889 5.878 0.731 0.870 1.077 wt 1.872 1.176 7.903 5.897 0.870 0.989 1.176 qsec 1.977 1.337 7.929 5.931 1.077 1.176 1.337
v_outer(split(mtcars[["mpg"]], mtcars[["carb"]]), cohens_d)
1 2 3 4 6 8 1 0.000 -1.234 -4.143 -4.384 NA NA 2 1.234 0.000 -2.823 -3.052 NA NA 3 4.143 2.823 0.000 -0.277 NA NA 4 4.384 3.052 0.277 0.000 NA NA 6 NA NA NA NA NA NA 8 NA NA NA NA NA NA
v_outer(split(CO2[["uptake"]], CO2[["Plant"]]), cohens_d)
Qn1 Qn2 Qn3 Qc1 Qc3 Qc2 Mn3 Mn2 Mn1 Mc2 Mc3 Mc1 Qn1 0.000 0.622 1.439 -1.132 -0.211 -0.169 -3.362 -2.090 -2.348 -9.246 -6.712 -6.132 Qn2 -0.622 0.000 0.752 -1.668 -0.787 -0.735 -3.734 -2.558 -2.790 -8.961 -6.737 -6.239 Qn3 -1.439 -0.752 0.000 -2.501 -1.564 -1.492 -4.653 -3.424 -3.634 -10.174 -7.848 -7.292 Qc1 1.132 1.668 2.501 0.000 0.856 0.870 -2.152 -0.930 -1.224 -7.773 -5.311 -4.798 Qc3 0.211 0.787 1.564 -0.856 0.000 0.035 -2.922 -1.749 -2.006 -8.175 -5.912 -5.428 Qc2 0.169 0.735 1.492 -0.870 -0.035 0.000 -2.876 -1.739 -1.991 -7.905 -5.742 -5.288 Mn3 3.362 3.734 4.653 2.152 2.922 2.876 0.000 1.214 0.830 -5.749 -3.121 -2.655 Mn2 2.090 2.558 3.424 0.930 1.749 1.739 -1.214 0.000 -0.330 -6.853 -4.342 -3.851 Mn1 2.348 2.790 3.634 1.224 2.006 1.991 -0.830 0.330 0.000 -6.112 -3.755 -3.319 Mc2 9.246 8.961 10.174 7.773 8.175 7.905 5.749 6.853 6.112 0.000 3.187 3.299 Mc3 6.712 6.737 7.848 5.311 5.912 5.742 3.121 4.342 3.755 -3.187 0.000 0.370 Mc1 6.132 6.239 7.292 4.798 5.428 5.288 2.655 3.851 3.319 -3.299 -0.370 0.000
print(v_outer(mtcars[, 1:7], pooled_sd), digits = 1)
mpg cyl disp hp drat wt qsec mpg 2.5 2.0 8.1 6.1 1.8 1.9 2.0 cyl 2.0 1.3 7.9 5.9 1.1 1.2 1.3 disp 8.1 7.9 11.1 9.8 7.9 7.9 7.9 hp 6.1 5.9 9.8 8.3 5.9 5.9 5.9 drat 1.8 1.1 7.9 5.9 0.7 0.9 1.1 wt 1.9 1.2 7.9 5.9 0.9 1.0 1.2 qsec 2.0 1.3 7.9 5.9 1.1 1.2 1.3
print(v_outer(mtcars[, 1:7], pooled_sd), digits = NULL)
mpg cyl disp hp drat wt qsec mpg 2.454984 1.976470 8.061192 6.106956 1.8113016 1.8715509 1.976600 cyl 1.976470 1.336384 7.928575 5.930801 1.0771723 1.1756656 1.336575 disp 8.061192 7.928575 11.132776 9.810748 7.8890232 7.9030738 7.928608 hp 6.106956 5.930801 9.810748 8.280270 5.8778205 5.8966654 5.930844 drat 1.811302 1.077172 7.889023 5.877820 0.7312173 0.8698092 1.077409 wt 1.871551 1.175666 7.903074 5.896665 0.8698092 0.9891701 1.175883 qsec 1.976600 1.336575 7.928608 5.930844 1.0774094 1.1758828 1.336766
v_outer(mtcars2, euc_dist)
mpg cyl disp hp drat wt qsec mpg 0.000 89.326 1391.495 824.375 98.512 102.877 33.261 cyl 89.326 0.000 1441.252 878.177 19.079 18.058 68.311 disp 1391.495 1441.252 0.000 656.640 1459.404 1458.014 1390.078 hp 824.375 878.177 656.640 0.000 895.520 895.374 826.067 drat 98.512 19.079 1459.404 895.520 0.000 8.140 81.255 wt 102.877 18.058 1458.014 895.374 8.140 0.000 83.655 qsec 33.261 68.311 1390.078 826.067 81.255 83.655 0.000
v_outer(mtcars2, sum2)
mpg cyl disp hp drat wt qsec mpg 1285.800 840.900 8026.000 5336.900 757.990 745.852 1214.060 cyl 840.900 396.000 7581.100 4892.000 313.090 300.952 769.160 disp 8026.000 7581.100 14766.200 12077.100 7498.190 7486.052 7954.260 hp 5336.900 4892.000 12077.100 9388.000 4809.090 4796.952 5265.160 drat 757.990 313.090 7498.190 4809.090 230.180 218.042 686.250 wt 745.852 300.952 7486.052 4796.952 218.042 205.904 674.112 qsec 1214.060 769.160 7954.260 5265.160 686.250 674.112 1142.320
v_outer(mtcars2, arbitrary)
mpg cyl disp hp drat wt qsec mpg -617.5 -172.6 -7357.7 -4668.6 -89.7 -77.6 -545.8 cyl -628.8 -183.9 -7369.0 -4679.9 -101.0 -88.9 -557.1 disp -557.0 -112.1 -7297.2 -4608.1 -29.2 -17.0 -485.2 hp -574.4 -129.5 -7314.6 -4625.5 -46.6 -34.4 -502.6 drat -632.2 -187.3 -7372.4 -4683.3 -104.4 -92.2 -560.4 wt -632.8 -187.9 -7373.0 -4683.9 -104.9 -92.8 -561.0 qsec -619.0 -174.1 -7359.2 -4670.1 -91.2 -79.1 -547.3
## A matrix mat <- matrix(rbinom(500, 0:1, .45), ncol=10) v_outer(mat, cos_sim)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V1 1.000 0.480 0.560 0.408 0.522 0.333 0.274 0.577 0.435 0.500 V2 0.480 1.000 0.385 0.294 0.573 0.560 0.439 0.485 0.585 0.560 V3 0.560 0.385 1.000 0.490 0.430 0.480 0.439 0.555 0.502 0.560 V4 0.408 0.294 0.490 1.000 0.456 0.408 0.559 0.442 0.533 0.612 V5 0.522 0.573 0.430 0.456 1.000 0.522 0.572 0.645 0.467 0.596 V6 0.333 0.560 0.480 0.408 0.522 1.000 0.365 0.433 0.522 0.417 V7 0.274 0.439 0.439 0.559 0.572 0.365 1.000 0.395 0.572 0.548 V8 0.577 0.485 0.555 0.442 0.645 0.433 0.395 1.000 0.302 0.505 V9 0.435 0.585 0.502 0.533 0.467 0.522 0.572 0.302 1.000 0.522 V10 0.500 0.560 0.560 0.612 0.596 0.417 0.548 0.505 0.522 1.000
v_outer(mat, euc_dist)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V1 0.000 3.606 3.317 3.464 3.606 4.000 4.000 3.464 3.606 3.464 V2 3.606 0.000 4.000 3.873 3.464 3.317 3.606 3.873 3.162 3.317 V3 3.317 4.000 0.000 3.317 4.000 3.606 3.606 3.606 3.464 3.317 V4 3.464 3.873 3.317 0.000 3.606 3.464 2.828 3.742 3.000 2.828 V5 3.606 3.464 4.000 3.606 0.000 3.606 3.317 3.317 3.742 3.317 V6 4.000 3.317 3.606 3.464 3.606 0.000 3.742 4.000 3.317 3.742 V7 4.000 3.606 3.606 2.828 3.317 3.742 0.000 4.000 3.000 3.162 V8 3.464 3.873 3.606 3.742 3.317 4.000 4.000 0.000 4.359 3.742 V9 3.606 3.162 3.464 3.000 3.742 3.317 3.000 4.359 0.000 3.317 V10 3.464 3.317 3.317 2.828 3.317 3.742 3.162 3.742 3.317 0.000
v_outer(mat, arbitrary)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V1 -8.5 -9.5 -9.5 -4.5 -11.5 -8.5 -6.5 -12.5 -7.5 -8.5 V2 -8.4 -9.4 -9.4 -4.4 -11.4 -8.4 -6.4 -12.4 -7.4 -8.4 V3 -8.4 -9.4 -9.4 -4.4 -11.4 -8.4 -6.4 -12.4 -7.4 -8.4 V4 -9.2 -10.2 -10.2 -5.2 -12.2 -9.2 -7.2 -13.2 -8.2 -9.2 V5 -8.1 -9.1 -9.1 -4.1 -11.1 -8.1 -6.1 -12.1 -7.1 -8.1 V6 -8.5 -9.5 -9.5 -4.5 -11.5 -8.5 -6.5 -12.5 -7.5 -8.5 V7 -8.8 -9.8 -9.8 -4.8 -11.8 -8.8 -6.8 -12.8 -7.8 -8.8 V8 -8.0 -9.0 -9.0 -4.0 -11.0 -8.0 -6.0 -12.0 -7.0 -8.0 V9 -8.7 -9.7 -9.7 -4.7 -11.7 -8.7 -6.7 -12.7 -7.7 -8.7 V10 -8.5 -9.5 -9.5 -4.5 -11.5 -8.5 -6.5 -12.5 -7.5 -8.5
## <strong>Not run</strong>: # library(qdap) # wc3 <- function(x, y) sum(sapply(list(x, y), wc, byrow = FALSE)) # L1 <- word_list(DATA$state, DATA$person)$cwl # (x <- v_outer(L1, wc3)) # diag(x) <- (sapply(L1, length)) # x # # v_outer(with(DATA, wfm(state, person)), cos_sim) # with(DATA, Dissimilarity(state, person)) # ## <strong>End(Not run)</strong>

See also

outer, cor

Author

Vincent Zoonekynd, eddi of stackoverflow.com, and Tyler Rinker .