【问题标题】:Two identical operations produce differently structured output两个相同的操作产生不同结构的输出
【发布时间】:2020-02-17 15:34:27
【问题描述】:

我在编写一些代码时遇到了困难。以前代码可以正常工作,但现在不行了。

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

我有两个数据框,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() 但这会导致稍后出现错误。

任何帮助表示赞赏。

【问题讨论】:

  • Dataframe 子集可以删除 dim 属性。试试dat[-train,"y", drop = FALSE]。而且cleansvm 不仅仅是"data.frame"

标签: r dataframe data.table


【解决方案1】:

cleansvm 是一个 data.table 对象。要获得预期的输出,您需要这样做

head(cleansvm[-train, Interpretation])

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    相关资源
    最近更新 更多