簡體   English   中英

如何使用 tibble::tribble() 創建列表列?

[英]How to create a list-column with tibble::tribble()?

使用tribble()從頭開始構建 tibble 時,如何將列設置為“列表列”,以便它可以包含不同類的數據?

例如,考慮以下代碼,其中我有一個邏輯值和一個數值。

library(tibble)

some_numeric <- 5
some_logical <- TRUE

my_df <-
  tribble(~name, ~value,
        "logical", some_logical,
        "numeric", some_numeric)

而我期待my_df看起來像:

## # A tibble: 2 x 2
##   name    value    
##  <chr>   <list>   
## 1 logical <lgl [1]>
## 2 numeric <dbl [1]>

我實際上得到了這個:

## # A tibble: 2 x 2
##   name    value
##   <chr>   <dbl>
## 1 logical     1
## 2 numeric     5

當然,有這樣一種使用tibble()的方法:

tibble(name = c("logical", "numeric"),
       value = list(some_logical, some_numeric))

## # A tibble: 2 x 2
##   name    value    
##   <chr>   <list>   
## 1 logical <lgl [1]>
## 2 numeric <dbl [1]>

但我想使用tribble()逐行創建它,以下也不起作用:

tribble(~name, ~value,
          "logical", list(some_logical),
          "numeric", list(some_numeric))

## # A tibble: 2 x 2
##   name    value     
##   <chr>   <list>    
## 1 logical <list [1]> ## <--- I don't want nested list but nested *logical* vec
## 2 numeric <list [1]> ## <--- I don't want nested list but nested *double* vec

所以我的問題是,有沒有一種簡單的方法可以使用tribble()來設置一個列表列,其中每個值都是嵌套向量而不是嵌套列表?

library(tidyverse)


f <- tribble(~name, ~value,
        "logical", as.vector("some_logical", mode = "list"),
        "numeric", as.vector("some_logical", mode = "list"))

f
#> # A tibble: 2 x 2
#>   name    value     
#>   <chr>   <list>    
#> 1 logical <list [1]>
#> 2 numeric <list [1]>

f$value
#> [[1]]
#> [[1]][[1]]
#> [1] "some_logical"
#> 
#> 
#> [[2]]
#> [[2]][[1]]
#> [1] "some_logical"

代表 package (v1.0.0) 於 2021 年 2 月 22 日創建

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM