如何将参数传递给purrr:::映射,该映射引用嵌套数据帧的列名?

如何将参数传递给purrr:::映射,该映射引用嵌套数据帧的列名?,r,machine-learning,model,nested,R,Machine Learning,Model,Nested,我正在使用足球数据的嵌套数据框,每个数据框都安装了一个模型。使用goalmodel::predict_result,我想根据该模型预测每场比赛的结果。predict_result函数需要三个参数:模型、主队向量和awayteams向量。如何在嵌套数据框中引用列名?下面是我的嵌套数据帧的一个示例: library(goalmodel) library(tidyverse) nested_df # A tibble: 4 x 3 # Groups: League [4] League

我正在使用足球数据的嵌套数据框,每个数据框都安装了一个模型。使用goalmodel::predict_result,我想根据该模型预测每场比赛的结果。predict_result函数需要三个参数:模型、主队向量和awayteams向量。如何在嵌套数据框中引用列名?下面是我的嵌套数据帧的一个示例:

library(goalmodel)
library(tidyverse)

nested_df
# A tibble: 4 x 3
# Groups:   League [4]
  League                     data model     
  <chr>          <list<df[,133]>> <list>    
1 F1             [380 x 133] <goalmodl>
2 E0             [380 x 133] <goalmodl>
3 SP1            [380 x 133] <goalmodl>
4 D1             [308 x 133] <goalmodl>
返回所需结果的数据帧。我已尝试使用purrr::map迭代上述函数,使用:

map(nested_df,~predict_result(.x$model,
                                 team1=.x$data[[.]]$HomeTeam,
                                 team2=.x$data[[.]]$AwayTeam,
                                 return_df = TRUE))
它不工作,错误显示:

Error in .x$data : $ operator is invalid for atomic vectors
我将感谢任何帮助和建议,提前谢谢。 -----以下是再现性示例:

df <- tibble(League = c("F1","E0","SP1","D1"),
             HomeTeam = c("TeamA","TeamB","TeamC","TeamD"),
             AwayTeam = c("TeamE","TeamF","TeamG","TeamH"),
             FTHG = c(0,1,2,0),
             FTAG = c(0,1,0,2))

nested_df <- df %>%
  group_by(League)%>%
  nest()%>%
  mutate(model = map(data,~goalmodel::goalmodel(goals1 = .x$FTHG, goals2 = .x$FTAG,
                                     team1 = .x$HomeTeam, team2 = .x$AwayTeam,
                                     ,rs=TRUE)))

nested_df
# A tibble: 4 x 3
# Groups:   League [4]
  League           data model     
  <chr>  <list<df[,4]>> <list>    
1 F1            [1 x 4] <goalmodl>
2 E0            [1 x 4] <goalmodl>
3 SP1           [1 x 4] <goalmodl>
4 D1            [1 x 4] <goalmodl>
df%
嵌套()%>%
突变(model=map)数据,~goalmodel::goalmodel(goals1=.x$FTHG,goals2=.x$FTAG,
团队1=.x$HomeTeam,团队2=.x$AwayTeam,
,rs=TRUE)))
嵌套的
#一个tibble:4x3
#组别:联盟[4]
联盟数据模型
1 F1[1 x 4]
2 E0[1 x 4]
3 SP1[1 x 4]
4 D1[1 x 4]

我想使用goalmodel::predict_result函数来迭代嵌套_df上的所有四个数据,并使用它们各自的goalmodl对象。提前感谢。

您应该使用
map2
功能

map2(.x = nested_df$model,
     .y = nested_df$data,
     .f = ~ predict_result(model = .x,
                           team1 = .y$HomeTeam,
                           team2 = .y$AwayTeam,
                           return_df = TRUE))
您将获得一个数据帧列表

或者像这样:

nested_df <- nested_df %>% 
  mutate(pred = map2(.x = model,
                     .y = data,
                     .f = ~ predict_result(model = .x,
                                           team1 = .y$HomeTeam,
                                           team2 = .y$AwayTeam,
                                           return_df = TRUE)))
nested_df%
突变(pred=map2(.x=model,
.y=数据,
.f=~预测结果(模型=.x,
team1=.y$HomeTeam,
团队2=.y$AwayTeam,
返回_df=TRUE)))

nested\u df
中可以得到一个列表列。使用
unnest
可以将其作为数据帧获取。

欢迎使用堆栈溢出!您能否通过共享您的数据样本使您的问题重现,以便其他人能够提供帮助(请不要使用
str()
head()
或屏幕截图)?您可以使用和包来帮助您实现这一点。另见&@Tung谢谢,对不起,我对这一点很陌生,所以我的问题不太清楚。我已经编辑了这个问题,请看我是否澄清了?谢谢
nested_df <- nested_df %>% 
  mutate(pred = map2(.x = model,
                     .y = data,
                     .f = ~ predict_result(model = .x,
                                           team1 = .y$HomeTeam,
                                           team2 = .y$AwayTeam,
                                           return_df = TRUE)))