根据所选列的数量,数据帧切片的返回类型会发生变化,如下面所示
> dim(df)
[1] 10 5
> colselect
[1] TRUE FALSE FALSE FALSE FALSE
> colselect2
[1] TRUE FALSE FALSE TRUE FALSE
> str(df[,colselect])
logi [1:10] TRUE TRUE TRUE TRUE FALSE FALSE ...
> str(df[,colselect2])
'data.frame': 10 obs. of 2 variables:
$ a: logi TRUE TRUE TRUE TRUE FALSE FALSE ...
$ b: logi FALSE TRUE TRUE FALSE TRUE TRUE ...
什么是正确的R语法才能始终获得10 * k的数据帧?
答案 0 :(得分:3)
你被R中臭名昭着的drop
'功能'咬了。请使用str(df[ , colselect, drop=FALSE])
。
对于“交互式”方便,如果您选择的只是维度的单个元素,则R倾向于删除数组的其他维度。因此,10 x 1 data.frame成为长度为10的向量。
有关该主题(以及其他内容)的更多乐趣,请阅读R-inferno的第8.1.44节。另外,在你的R口译员上,试试?'['
。