如何使用'tidyverse'包将函数的多次返回放在一列或多列中
这里是我的问题:我有一个函数,它接受1个double并返回几个double,我想直接在tibble的不同列上获取它们。我用如何使用'tidyverse'包将函数的多次返回放在一列或多列中,r,list,dplyr,mutate,R,List,Dplyr,Mutate,这里是我的问题:我有一个函数,它接受1个double并返回几个double,我想直接在tibble的不同列上获取它们。我用mutate()和/或map()尝试了几种方法 我不想调用该方法n次,每次调用函数返回的列表的不同元素 以下是我试图做的一个一般性问题: library(tidyverse) ## a random function that return more than 1 element f <- function(x){ return(list(x/2,x**2)) }
mutate()
和/或map()
尝试了几种方法
我不想调用该方法n次,每次调用函数返回的列表的不同元素
以下是我试图做的一个一般性问题:
library(tidyverse)
## a random function that return more than 1 element
f <- function(x){
return(list(x/2,x**2))
}
## a tibble with a column on which I apply the function
tib <- tibble( x = rep(100:120))
tib%>%
mutate(y = f(x))
## error:
#Error : Problem with `mutate()` input `y`.
#x Input `y` can't be recycled to size 21.
#ℹ Input `y` is `f(x)`.
#ℹ Input `y` must be size 21 or 1, not 2.
## what I want to avoid:
tib %>%
mutate(y = f(x)[[1]], z = f(x)[[2]])
库(tidyverse)
##返回多个元素的随机函数
f您可以使用嵌套数据框(或根据您首选的术语列出列)来解决此问题
下面的代码是如何使用mutate和map执行此操作的一般示例,它将创建嵌套数据帧,然后取消测试:
f <- function(x){
tibble(y = x* 2, z = x*3)
}
tib <- tibble(x = rep(100:120)) %>%
mutate(data = map(x, f)) %>%
unnest()
tib
f%
unnest()
蒂布
谢谢!我仍然需要研究map()的工作原理,然后使它看起来像purrr包的一个简单应用程序。如果这是您经常遇到的问题,那么使用purrr的map函数和嵌套数据帧肯定是值得学习的