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
使用map(purrr)将ARUMENTS传递给R自定义函数_R_Dplyr_Tidyverse - Fatal编程技术网

使用map(purrr)将ARUMENTS传递给R自定义函数

使用map(purrr)将ARUMENTS传递给R自定义函数,r,dplyr,tidyverse,R,Dplyr,Tidyverse,使用iris进行再现性 library(tidyverse) mean_by <- function(data,by,var1) { data %>% group_by({{by}}) %>% summarise(avg=mean({{var1}})) } iris %>% mean_by(Species,Petal.Width) # This works map_dfr(iris,mean_by,Species) # This doe

使用iris进行再现性

library(tidyverse)

mean_by <- function(data,by,var1) {
    data %>% 
    group_by({{by}}) %>% 
    summarise(avg=mean({{var1}}))
}


iris %>% mean_by(Species,Petal.Width) # This works

map_dfr(iris,mean_by,Species) # This doesnt work, I want to run this to all numerical columns in iris, how do I do that.
更重要的是,基本问题是:如何使用R中的map_dfr将参数传递给自定义函数理想情况下,您应该跨:


对不起,我正在学习函数&想学习如何在map_-dfr中像上面那样传递参数。我本可以用很多方法做这个简单的练习,但我有兴趣按照要求做。谢谢,2个问题1。为什么当我在函数调用的第一个参数前面添加var1时,答案变成NA。例如:map\u dfrvar1=名称SelectIris,其中是。数值,平均值,数据=iris,by=物种2。为什么我们必须将var1的平均值从{{var1}}改为.data[[var1]]var1部分让我非常困惑,我们是否应该按照函数定义来命名参数,否则函数如何知道哪个参数是哪个参数。不能将参数命名为map\u dfrvar1=。。。。。。。为了减少混淆,请使用map\u dfrnamesselectiris,其中是.numeric、~mean\u byiris、Species、.x2。我们现在将var1作为字符串传递,因此将{{var1}}更改为.data[[var1]]。3.函数知道哪个是哪个,因为我们已经命名data=iris和by=Species,所以剩下的就是var1.map\u dfrnamesselectiris,whereis.numeric,~mean\u bydata=iris,by=Species,var1=.x谢谢,这对我来说非常有意义。
library(dplyr)
library(purrr)

iris %>%
  group_by(Species) %>%
  summarise(across(where(is.numeric), mean, na.rm = TRUE))

#  Species    Sepal.Length Sepal.Width Petal.Length Petal.Width
#  <fct>             <dbl>       <dbl>        <dbl>       <dbl>
#1 setosa             5.01        3.43         1.46       0.246
#2 versicolor         5.94        2.77         4.26       1.33 
#3 virginica          6.59        2.97         5.55       2.03 
mean_by <- function(data,by,var1) {
  data %>% 
    group_by({{by}}) %>% 
    summarise(avg = mean(.data[[var1]]))
}

map_dfr(names(select(iris, where(is.numeric))), 
              mean_by, data = iris, by = Species)

#  Species      avg
#   <fct>      <dbl>
# 1 setosa     5.01 
# 2 versicolor 5.94 
# 3 virginica  6.59 
# 4 setosa     3.43 
# 5 versicolor 2.77 
# 6 virginica  2.97 
# 7 setosa     1.46 
# 8 versicolor 4.26 
# 9 virginica  5.55 
#10 setosa     0.246
#11 versicolor 1.33 
#12 virginica  2.03