【问题标题】:Why are my list elements converted to tibbles?为什么我的列表元素被转换为小标题?
【发布时间】:2016-08-23 15:08:50
【问题描述】:

我从 R 开始,并尝试将一些数据组织成这样的嵌套列表:

library(readr)    
dataframe1 <- read_csv2("sampleData.csv", col_names = FALSE)

# convert dataframe to a nested list
width <- ncol(sampleData)
nestedList <- list()
for(i in 1:width){
  nestedList[[i]] = list(name=dataframe1[1, i], attribute1 = dataframe1[2, i], attribute2 = dataframe1[3, i], attribute3 = dataframe1[4, i])
}

当我尝试访问列表中的元素时,它们总是显示为小标题,如下所示:

> nestedList[[1]]$name
# A tibble: 1 x 1
      X1
   <chr>
1 B06_01

所以列表看起来确实是列表,但为什么单个元素会自动成为小标题? (我知道tibble 是一个增强的数据框类。)为什么它们不是向量?另外,我注意到即使是数值在嵌套列表中也会以“chr”结尾。

【问题讨论】:

  • 因为 data.frame1 是使用 readrread_csv2 函数读入的。该函数默认导入tbl类的数据。

标签: r data-structures


【解决方案1】:

因为当子集 tibble 对象时它仍然保留它的属性,试试下面的例子:

library(tibble)

as_tibble(mtcars)[1, 1]
# # A tibble: 1 x 1
#     mpg
#   <dbl>
# 1    21

mtcars[1, 1]
# [1] 21


attributes(as_tibble(mtcars)[1, 1])
# $names
# [1] "mpg"
# 
# $row.names
# [1] 1
# 
# $class
# [1] "tbl_df"     "tbl"        "data.frame"

attributes(mtcars[1, 1])
# NULL

【讨论】:

  • 我明白了(尽管我看不到您的示例表明从小标题中取出单个值仍然会产生子集小标题)
  • @prinzminz as_tibble(mtcars) 将其转换为 tibble 对象,然后我将第一行第一列 as_tibble(mtcars)[1, 1] 设置为子集。一行一列是一个值。
猜你喜欢
  • 2021-05-24
  • 2011-02-09
  • 2020-02-11
  • 2011-11-13
  • 2020-04-29
  • 1970-01-01
  • 2017-07-16
  • 1970-01-01
  • 2012-10-01
相关资源
最近更新 更多