r - is.list 在 tibble 列上总是返回 true?

标签 r dplyr tibble

所以,我有一个包含向量列和列表列的 tibble。

使用 dplyr 可以轻松选择列表列:

select_if(tb, is.list)

但它与 !- 的否定不起作用编辑,这 select_if(tb,function(x)! is.list(x))

所以我想我可以做这样的事情:

select(tb, which(!apply(tb,2,is.list))

这将返回无列。因为显然(这里是表示),tibble 列上的 is.list 总是返回 true,即使对于向量列(?)。

df <- data.frame(A = runif(100))
tb <- tibble(A = runif(100))

is.list(df$A)
# FALSE
is.list(tb$A)
# FALSE
is.list(df[,1])
# FALSE
is.list(tb[,1])
# TRUE

有人能解释一下这里发生了什么吗?

最佳答案

因为 tibble 的默认 drop 参数为 FALSE ,这意味着当您仅从 dataframe 中提取一列时,它会返回一个数字向量,而当您从 tibble 中提取一列时,它会返回一列 tibble。

检查他们的类(class)。

class(df[, 1])
#[1] "numeric"
class(tb[, 1])
#[1] "tbl_df"     "tbl"        "data.frame"

如果您在数据框中添加drop = FALSE,它将返回一个数据框。

class(df[, 1, drop = FALSE])
#[1] "data.frame"

数据框/tibble 列仍然是一个列表。

is.list(tb[, 1])
#[1] TRUE
is.list(df[, 1, drop = FALSE])
#[1] TRUE

因此,要回答您的问题,是的,is.list 总是在 tibble 上返回 TRUE ,除非您在一列上明确提及 drop = TRUE蒂 bool 。

is.list(tb[, 1, drop = TRUE])
#[1] FALSE

关于r - is.list 在 tibble 列上总是返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61362319/

相关文章:

r - dplyr::select() 对可能不存在的列重新排序

r - 如何让 tibbles 显示有效数字

r - 显示每列的唯一值

r - Mutate() 基于在另一列中找到的不同长度的字符串向量的新列

r - 在 R 中按多个其他列分组后求列的平均值

r - 如何使用 'data.table' 添加缺失日期并填充组内的值

r - 在 r data.table 中查找重复组

r - 系统计算奇异 : reciprocal condition number in R

R:tibble::lst 名称中不需要的引号

r - 修改/添加列到嵌套的tibble