Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用purr::map\u dfr从值而不是名称分配id值_R_Purrr - Fatal编程技术网

使用purr::map\u dfr从值而不是名称分配id值

使用purr::map\u dfr从值而不是名称分配id值,r,purrr,R,Purrr,我认为这个问题与……有关,但不完全相同 我经常使用map\u dfr来表示希望使用每个参数的值而不是其名称作为.id变量的情况。下面是一个愚蠢的例子:我正在计算将mtcars$mpg的平均值提高到二次方、四次方和六次方: 库(tidyverse) 列表(2,4,6)%>%map\u dfr(~tibble(x=mean(mtcars$mpg^.),.id=“name”) ##名称x ## ## 1 1 439. ## 2 2 262350. #

我认为这个问题与……有关,但不完全相同

我经常使用
map\u dfr
来表示希望使用每个参数的值而不是其名称作为
.id
变量的情况。下面是一个愚蠢的例子:我正在计算将mtcars$mpg的平均值提高到二次方、四次方和六次方:

库(tidyverse)
列表(2,4,6)%>%map\u dfr(~tibble(x=mean(mtcars$mpg^.),.id=“name”)
##名称x
##         
## 1 1           439.
## 2 2        262350.
## 3 3     198039783.
我希望
name
变量是2,4,6,而不是1,2,3。我可以通过在管道中包括
setNames(.data)
来解决这个问题:

列表(2,4,6)%>%
集合名(.data)%%>%
map_dfr(~tibble(x=平均值(mtcars$mpg^.)),.id=“name”)
但我想知道我是否缺少一种更惯用的方法


至于使用类似于
~tible(name=,…)
:不错,但对于映射函数已经返回tible的情况来说稍微不方便,因为我们必须添加一个不必要的
tible()
调用:

列表(2,4,6)%>%
map_dfr(~tibble(name=.)。,
扫帚::整齐(长轴(英里/加仑~气缸,数据=平均车数,偏移量=代表(,,nrow(平均车数);))))

好的,我想我在发布前不久就发现了这个(所以我会回答)。指出
tibble::lst()
是一个自命名列表函数,因此只要我们使用
tibble::lst(2,4,6)
而不是
list(2,4,6)
,它就可以工作,例如

lst(2,4,6)%>%map\u-dfr(~tibble(x=mean(mtcars$mpg^.)),.id=“name”)
这也可以:

库(tidyverse)
#@本·博克回答。
lst(2,4,6)%>%map\u dfr(~tibble(x=mean(mtcars$mpg^.),.id=“power”)
#>#tibble:3 x 2
#>幂x
#>         
#> 1 2           439.
#> 2 4        262350.
#> 3 6     198039783.
列表(2,4,6)%>%map_df(~tibble(power=as.character(.x),x=mean(mtcars$mpg^.))
#>#tibble:3 x 2
#>幂x
#>         
#> 1 2           439.
#> 2 4        262350.
#> 3 6     198039783.
#另一种选择
seq(2,6,2)%>%map2_df(重新运行(长度(.),mtcars$mpg),~c(x=as.character(.x),mean=round(平均值(.y^.x),0)))
#>#tibble:3 x 2
#>x均值
#>        
#> 1 2     439      
#> 2 4     262350   
#> 3 6     198039783

由(v2.0.0)于2021-06-06创建,这也是可能的,但是这不是我的第一选择,只有
地图
就足够了:

library(purrr)

list(2, 4, 6) %>%
  pmap_dfr(~ tibble(power = c(...), x = map_dbl(c(...), ~ mean(mtcars$mpg ^ .x))))

# A tibble: 3 x 2
  power          x
  <dbl>      <dbl>
1     2       439.
2     4    262350.
3     6 198039783.
库(purrr)
列表(2,4,6)%>%
pmap_dfr(~tibble(power=c(…),x=map_dbl(c(…),~mean(mtcars$mpg^.x)))
#一个tibble:3x2
幂x
1     2       439.
2     4    262350.
3     6 198039783.

list(2,4,6)%%>%map\u-dfr(~tibble(x=mean(mtcars$mpg^.x),names=.x))
?这很有效(你可以把它作为答案发布,我至少会投赞成票)但我的例子可能太简单了:在很多情况下,返回的对象已经是一个tibble,我不想再添加另一个
tibble()
语句……我不确定您的目标到底是什么,但对于更新后的问题,您可以只做
list(2,4,6)%%>%map\u dfr(~broom::tidy(lm(mpg~cyl,data=mtcars,offset=rep(,nrow(mtcars)))%>%mutate(names=.x))
足够公平。然后,
names
列将是最后一列,不过…(关于如何/是否可以轻松地使
mutate
在开头/左边添加变量…)适用于我给出的简单示例(应该包括前面更复杂的示例…)是的,这完全可能不是最好的。如果没有更早发布类似的示例,这将是我的第一选择:
list(2,4,6)%%>%map\u dfr(~tibble(name=.x,x=mean(mtcars$mpg^.x)))
。但最好看看原始数据集的一部分。