两个相同的操作产生不同结构的输出

时间:2019-10-21 14:10:13

标签: r dataframe data.table

我在编写某些代码时遇到困难。以前该代码可以正常运行,但现在却不能。

为了突出这个问题,我提供了两个数据框。

我有两个数据帧,dat和cleansvm。当我以相同的方式对两个框架进行子集化时,我得到以下信息:

head(dat[-train,])        
        x.1        x.2 y
2  2.183643  3.6888733 1
3  1.164371  3.5865884 1
4  3.595281  1.6690922 1
5  2.329508 -0.2852355 1
6  1.179532  4.4976616 1
10 1.694612  2.5101084 1

head(dat[-train,"y"])
1 1 1 1 1 1

class(dat)
[1] "data.frame" 

head(cleansvm[-train,])   
   Interpretation    col1     col2
1:              R       0        0      
2:              R       0        0     
3:              R       0        0       
4:              R       0        0      
5:              R       0        0       
6:              R       0        0

head(cleansvm[-train,"Interpretation"])
   Interpretation
1:              R
2:              R
3:              R
4:              R
5:              R
6:              R

class(cleansvm)
[1] "data.table" "data.frame"

我的问题如下:为什么head(dat[-train,"y"])head(cleansvm[-train,"Interpretation"])的形式不同,我能做些什么来使head(cleansvm[-train,"Interpretation"])head(dat[-train,"y"])一样?

head(dat[-train,"y"])稍后可以在我的代码中使用以形成表格,而head(cleansvm[-train,"Interpretation"])由于其长度而不能使用。

我很确定cleansvm的类是引起问题的原因,但我不知道为什么。我尝试将其转换为简单的数据帧(当前为数据表),但这无济于事。我还尝试在head(cleansvm[-train,"Interpretation"])上使用t(),但是稍后导致错误。

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

cleansvmdata.table对象。要获得预期的输出,您需要执行

head(cleansvm[-train, Interpretation])

head(cleansvm[-train,"Interpretation", with = F])