使用索引提取tibble列时is.numeric无法检测数据类型的原因
问题原因解析
这是因为两种提取方式返回的对象类型完全不同:
test$score提取的是数值型原子向量,直接对应score列的原始数据类型,所以is.numeric(test$score)返回TRUE。test[,2]在tibble中默认返回的是单列tibble(本质是数据框的子类),而非单独的向量。is.numeric()检查的是整个对象的类型,tibble本身不属于numeric类型,因此返回FALSE。
验证代码
可以通过查看两种方式返回对象的类型来确认:
class(test$score) # 输出:"numeric" class(test[,2]) # 输出:"tbl_df" "tbl" "data.frame"
解决方法
如果想通过索引提取得到数值型向量,可以用以下两种方式:
- 使用双层方括号提取:
test[[2]] - 添加
drop=TRUE参数:test[,2, drop=TRUE]
执行上述任意一种后,is.numeric()都会返回TRUE。
内容的提问来源于stack exchange,提问作者ML Zufelt
相关产品推荐
相关产品推荐

