is.list 在 tibble 列上总是 returns 正确?
is.list always returns true on tibble columns?
所以,我有一个包含矢量和 list-columns 的小标题。
使用 dplyr 选择 list-columns 很容易:
select_if(tb, is.list)
但它与 !
或 -
的否定不起作用 编辑,这确实 select_if(tb,function(x)!is.list(x))
所以我想我可以做类似的事情:
select(tb, which(!apply(tb,2,is.list))
此 returns 无列。因为显然(reprex 来了),tibble 列上的 is.list
始终 returns 为真,即使对于向量列 (?)。
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 中对一列进行子集化时,它 return 是一个数字向量,而当你从 tibble 中对一列进行子集化时,它 return 是一个one-column 小题大做。
检查他们的 类。
class(df[, 1])
#[1] "numeric"
class(tb[, 1])
#[1] "tbl_df" "tbl" "data.frame"
如果你在dataframe中添加drop = FALSE
,它会return你返回一个dataframe。
class(df[, 1, drop = FALSE])
#[1] "data.frame"
dataframe/tibble 列仍然是一个列表。
is.list(tb[, 1])
#[1] TRUE
is.list(df[, 1, drop = FALSE])
#[1] TRUE
所以回答你的问题是的,is.list
总是 returns TRUE
on tibble 除非你明确提到 drop = TRUE
on one-column tibble。
is.list(tb[, 1, drop = TRUE])
#[1] FALSE
所以,我有一个包含矢量和 list-columns 的小标题。
使用 dplyr 选择 list-columns 很容易:
select_if(tb, is.list)
但它与 !
或 -
的否定不起作用 编辑,这确实 select_if(tb,function(x)!is.list(x))
所以我想我可以做类似的事情:
select(tb, which(!apply(tb,2,is.list))
此 returns 无列。因为显然(reprex 来了),tibble 列上的 is.list
始终 returns 为真,即使对于向量列 (?)。
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 中对一列进行子集化时,它 return 是一个数字向量,而当你从 tibble 中对一列进行子集化时,它 return 是一个one-column 小题大做。
检查他们的 类。
class(df[, 1])
#[1] "numeric"
class(tb[, 1])
#[1] "tbl_df" "tbl" "data.frame"
如果你在dataframe中添加drop = FALSE
,它会return你返回一个dataframe。
class(df[, 1, drop = FALSE])
#[1] "data.frame"
dataframe/tibble 列仍然是一个列表。
is.list(tb[, 1])
#[1] TRUE
is.list(df[, 1, drop = FALSE])
#[1] TRUE
所以回答你的问题是的,is.list
总是 returns TRUE
on tibble 除非你明确提到 drop = TRUE
on one-column tibble。
is.list(tb[, 1, drop = TRUE])
#[1] FALSE