该数据框包含我所说的“数据”:
library(tidyverse)
df_d <- data_frame(key = c("cat", "cat", "dog", "dog"),
value_1 = c(1,2,3,4),
value_2 = c(2,4,6,8))
这是一个数据框,我打算将其用作函数查找表之类的东西。f
是单变量函数并且f2
是一个多变量函数:
df_f <- data_frame(key = c("cat", "dog"),
f = c(function(x) x^2, function(x) sqrt(x)),
f2 = c(function(x) (x[1]+x[2])^2, function(x) sqrt(x[1]+x[2])))
我可以轻松制作一个数据框,以便任何cat
行得到cat
函数和任何dog
行得到dog
功能:
df_both <- left_join(df_d, df_f)
我能够弄清楚如何应用每一个f
功能,比如说value_1
列得到:
df_both %>% mutate(result = invoke_map_dbl(f, value_1))
#> # A tibble: 4 x 6
#> key value_1 value_2 f f2 result
#> <chr> <dbl> <dbl> <list> <list> <dbl>
#> 1 cat 1.00 2.00 <fn> <fn> 1.00
#> 2 cat 2.00 4.00 <fn> <fn> 4.00
#> 3 dog 3.00 6.00 <fn> <fn> 1.73
#> 4 dog 4.00 8.00 <fn> <fn> 2.00
我的问题是:如何创建列result2
这需要每个函数f2
并用作其输入c(value_1, value_2)
。如果重新定义函数f2
显式地成为两个变量的函数使事情变得更容易,这也很好。
期望的输出:
#> # A tibble: 4 x 7
#> key value_1 value_2 f f2 result result2
#> <chr> <dbl> <dbl> <list> <list> <dbl> <dbl>
#> 1 cat 1.00 2.00 <fn> <fn> 1.00 9.00
#> 2 cat 2.00 4.00 <fn> <fn> 4.00 36.0
#> 3 dog 3.00 6.00 <fn> <fn> 1.73 3.00
#> 4 dog 4.00 8.00 <fn> <fn> 2.00 3.46
(这个问题是由今天早些时候的一个不幸的自我删除问题引发的。)