使用purrr(tidyverse)在数据帧的所有列上映射距离函数

时间:2017-10-10 23:03:14

标签: r tidyverse purrr

我有一个距离函数,它接收2个(数字)向量并计算它们之间的距离。

对于下面示例中的给定数据帧(mtcars_raw)和固定输入向量(test_vec),我想计算每列的成对距离(即应用距离函数){ {1}}并返回距离矢量。向量的长度应该是列数。

请参阅可重复的示例:


test_vec

有人可以显示library(datasets) # The raw dataframe containing only numeric columns mtcars_raw <- datasets::mtcars # The distance function between 2 vectors (of the same length typically) eucl_dist <- function(x, y){ return(sqrt(sum((x-y)^2))) } # An example of a numeric vector to check the distance against each column test_vec <- rnorm(n = dim(mtcars_raw)[1], mean = 12, sd = 2) # Manually for the first column, we would have: dist_1 <- eucl_dist(x = test_vec, mtcars_raw[, 1]) dist_1 #> [1] 58.71256 # Manually for the second column, we would have: dist_2 <- eucl_dist(x = test_vec, mtcars_raw[, 1]) dist_2 #> [1] 58.71256 # Would like dist_comb returned for all columns without having to manually do # the combining dist_comb <- c(dist_1, dist_2) dist_comb #> [1] 58.71256 58.71256 代码,在mtcars_raw的每一列上针对test_vec返回向量吗?

1 个答案:

答案 0 :(得分:1)

使用map_dblmap的特殊情况循环遍历列,但显式返回双类型向量:

map_dbl(mtcars_raw[1:2], ~ eucl_dist(test_vec, .x))

#     mpg      cyl 
#58.06386 36.51686 

在所有列上:

map_dbl(mtcars_raw, ~ eucl_dist(test_vec, .x))

#       mpg        cyl       disp         hp       drat         wt       qsec         vs         am       gear       carb 
#  58.06386   36.51686 1414.98943  850.71261   49.72837   51.74005   35.50658   67.25079   67.35504   49.34896   54.56577