0
library(tidyverse)

なぜこれはリスト列「am」を生成するのですか?

mtcars %>%
group_by(cyl) %>%
mutate(am=list(mtcars[,'am']))

だがしかし:

mtcars %>%
group_by(cyl) %>%
nest() %>%
mutate(am=list(mtcars[,'am']))

エラー: STRSXP と互換性がありません

これは少し不自然な例ですが、私が取り組んでいることに関連しています。mutate はその環境外にスコープを設定しませんか?

4

1 に答える 1

2
mtcars %>% group_by(cyl) %>% nest()

## # A tibble: 3 × 2
##     cyl               data
##   <dbl>             <list>
## 1     6  <tibble [7 × 10]>
## 2     4 <tibble [11 × 10]>
## 3     8 <tibble [14 × 10]>

には 3 つの行があるため、必要な列にも 3 つの要素が必要です。

各行の完全なam列が必要な場合は、行ごとに変更できます。これにより、mutate行ごとに個別に呼び出しが評価されます。

mtcars %>% group_by(cyl) %>% nest() %>% rowwise() %>% mutate(am = list(mtcars$am))

## Source: local data frame [3 x 3]
## Groups: <by row>
## 
## # A tibble: 3 × 3
##     cyl               data         am
##   <dbl>             <list>     <list>
## 1     6  <tibble [7 × 10]> <dbl [32]>
## 2     4 <tibble [11 × 10]> <dbl [32]>
## 3     8 <tibble [14 × 10]> <dbl [32]>

またrowwiseはなしで、各行に対して目的のリストを繰り返すだけです:

mtcars %>% group_by(cyl) %>% nest() %>% mutate(am = rep(list(mtcars$am), n()))

## # A tibble: 3 × 3
##     cyl               data         am
##   <dbl>             <list>     <list>
## 1     6  <tibble [7 × 10]> <dbl [32]>
## 2     4 <tibble [11 × 10]> <dbl [32]>
## 3     8 <tibble [14 × 10]> <dbl [32]>
于 2016-09-29T03:21:29.413 に答える