首页 > 解决方案 > 在 R 中使用 cur_data() 创建数据帧的列表列。访问数据的问题

问题描述

我执行以下操作:

mtcars %>% 
  group_by(cyl) %>% 
  summarise(
    model = list(lm(disp ~ mpg, data = cur_data())),
    data = list(dat = cur_data())
  ) -> df

但是,当我想访问 list-columndata时,它给了我这个错误:

> df$data
$dat
Error: Can't subset elements that don't exist.
x Locations 2, 3, 4, 5, 6, etc. don't exist.
ℹ There are only 1 element.

虽然实际glimpse看起来像这样:

> glimpse(df)
Rows: 3
Columns: 3
$ cyl   <dbl> 4, 6, 8
$ model <list> [<233.067448, -4.797961, -15.673940, 30.702798, 17.126060, 1.086485, -11.509437, 0.68342…
$ data  <named list> [<tbl_df[11 x 11]>, <tbl_df[7 x 11]>, <tbl_df[14 x 11]>]

不太确定这里出了什么问题...

标签: rdplyrtidyverse

解决方案


改变操作顺序。

library(dplyr)

mtcars %>% 
  group_by(cyl) %>% 
  summarise(
    data = list(dat = cur_data()),
    model = list(lm(disp ~ mpg, data = cur_data())),
  ) -> df 

df$data
#$dat
# A tibble: 11 x 10
#     mpg  disp    hp  drat    wt  qsec    vs    am  gear  carb
#   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1  22.8 108      93  3.85  2.32  18.6     1     1     4     1
# 2  24.4 147.     62  3.69  3.19  20       1     0     4     2
# 3  22.8 141.     95  3.92  3.15  22.9     1     0     4     2
# 4  32.4  78.7    66  4.08  2.2   19.5     1     1     4     1
# 5  30.4  75.7    52  4.93  1.62  18.5     1     1     4     2
#...
#...

#$dat
# A tibble: 7 x 10
#    mpg  disp    hp  drat    wt  qsec    vs    am  gear  carb
#  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1  21    160    110  3.9   2.62  16.5     0     1     4     4
#2  21    160    110  3.9   2.88  17.0     0     1     4     4
#3  21.4  258    110  3.08  3.22  19.4     1     0     3     1
#4  18.1  225    105  2.76  3.46  20.2     1     0     3     1
#5  19.2  168.   123  3.92  3.44  18.3     1     0     4     4
#6  17.8  168.   123  3.92  3.44  18.9     1     0     4     4
#7  19.7  145    175  3.62  2.77  15.5     0     1     5     6

#$dat
# A tibble: 14 x 10
#     mpg  disp    hp  drat    wt  qsec    vs    am  gear  carb
#   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1  18.7  360    175  3.15  3.44  17.0     0     0     3     2
# 2  14.3  360    245  3.21  3.57  15.8     0     0     3     4
# 3  16.4  276.   180  3.07  4.07  17.4     0     0     3     3
# 4  17.3  276.   180  3.07  3.73  17.6     0     0     3     3
# 5  15.2  276.   180  3.07  3.78  18       0     0     3     3
#...

我不知道这个错误的确切原因,但我的猜测是,model = list(lm(disp ~ mpg, data = cur_data())) cur_data()现在做之后包括当前分组的数据帧以及model导致数据存储问题的数据帧。


推荐阅读