1
我有以下代碼:如何使用purrr基於在數據幀由參數應用功能
library(MASS)
library(tidyverse)
# Get density of points in 2 dimensions.
# @param x A numeric vector.
# @param y A numeric vector.
# @param n Create a square n by n grid to compute density.
# @return The density within each square.
get_density <- function(x, y, n = 100) {
dens <- MASS::kde2d(x = x, y = y, n = n)
ix <- findInterval(x, dens$x)
iy <- findInterval(y, dens$y)
ii <- cbind(ix, iy)
return(dens$z[ii])
}
dens_wrapper <- function (tbl=NULL, var1=NULL, var2=NULL) {
tbl_pair <- tbl %>%
select_(var1, var2)
x <- tbl_pair %>% pull(var1)
y <- tbl_pair %>% pull(var2)
tbl_pair$density <- get_density(x,y)
tbl_pair
}
tbl <- as.tibble(iris) %>%
select(-Species)
dens_wrapper(tbl=tbl, var1="Sepal.Length",var2="Petal.Length")
#> # A tibble: 150 x 3
#> Sepal.Length Petal.Length density
#> <dbl> <dbl> <dbl>
#> 1 5.1 1.4 0.15253089
#> 2 4.9 1.4 0.15139758
#> 3 4.7 1.3 0.12566689
#> 4 4.6 1.5 0.10828077
#> 5 5.0 1.4 0.15624282
#> 6 5.4 1.7 0.10998006
#> 7 4.6 1.4 0.10773843
#> 8 5.0 1.5 0.15908618
#> 9 4.4 1.4 0.06635717
#> 10 4.9 1.5 0.15379367
#> # ... with 140 more rows
我試圖使用dens_wrapper()
功能所設置的參數 的
tbl_colnames <- colnames(tbl)
allcomb_var <- expand.grid(tbl_colnames, tbl_colnames)
allcomb_var
#> Var1 Var2
#> 1 Sepal.Length Sepal.Length
#> 2 Sepal.Width Sepal.Length
#> 3 Petal.Length Sepal.Length
#> 4 Petal.Width Sepal.Length
#> 5 Sepal.Length Sepal.Width
#> 6 Sepal.Width Sepal.Width
#> 7 Petal.Length Sepal.Width
#> 8 Petal.Width Sepal.Width
#> 9 Sepal.Length Petal.Length
#> 10 Sepal.Width Petal.Length
#> 11 Petal.Length Petal.Length
#> 12 Petal.Width Petal.Length
#> 13 Sepal.Length Petal.Width
#> 14 Sepal.Width Petal.Width
#> 15 Petal.Length Petal.Width
#> 16 Petal.Width Petal.Width
有了這個代碼:通過此構造
allcomb_var %>%
purrr:pmap(list(tbl=tbl, var1=Var1, var2=Var2), dens_wrapper)
但它給我這個錯誤:
Error in as_function(.f, ...) : object 'Var1' not found
怎樣做正確的方式?
@baptise解決方案給出了這樣的(不太我所期望的):沿着這些線路
# A tibble: 2,400 x 5
Sepal.Length density Sepal.Width Petal.Length Petal.Width
<dbl> <dbl> <dbl> <dbl> <dbl>
1 5.1 0.35060831 NA NA NA
2 4.9 0.32088818 NA NA NA
3 4.7 0.23507822 NA NA NA
4 4.6 0.18191675 NA NA NA
5 5.0 0.34885589 NA NA NA
6 5.4 0.32746528 NA NA NA
7 4.6 0.18191675 NA NA NA
8 5.0 0.34885589 NA NA NA
9 4.4 0.09698895 NA NA NA
10 4.9 0.32088818 NA NA NA
# ... with 2,390 more rows
不完全。我期望它返回數據幀列表。每個數據幀3列。您的輸出提供了NAs。查看我的更新。 – pdubois
@pdubois pmap將返回一個列表(pmap_df將這些列表結合到一個df中,這就是爲什麼有大量的NAs,因爲每個結果都有不同的列名) – baptiste
謝謝。我試過你的編輯。很接近。但是,我怎麼發現最後的骰子尺寸是'150 x 2'。預計所有16個Tibble的尺寸爲'150 x 3' – pdubois