split = = TRUE时出错:compare(1)仅适用于原子和列表类型

时间:2017-08-19 13:35:08

标签: r

这是产生上述错误的代码行。变量'y'包含值'0'或'1'。数据框中有大约十二个不同的变量。我正在使用R版本3.4.1。

set.seed(201)
library(caTools)
spl = sample.split(bank$y, 0.7)
training <- subset(bank, split == TRUE)

1 个答案:

答案 0 :(得分:5)

我没有您的数据,但看起来您只是用错误的名称调用对象。

training <- subset(bank, spl == TRUE)

应该工作。

就个人而言,我更喜欢以下内容,仅仅因为它对我的大脑来说更合乎逻辑,但是它做了同样的事情:

training <- bank[ spl == TRUE, ]

你可以走得更远,但根据你大脑的工作方式,它可能没什么意义:

training <- bank[ spl, ]

解释:您使用以下内容创建名为spl的向量:

spl = sample.split(bank$y, 0.7)

这为您提供了一个逻辑向量,旨在将您的数据框子集化到与TRUE中的spl值对应的行。为此,您使用subset或类似内容。 subset要求输入(bank)和矢量用作子集运算符。向量是一个逻辑向量,TRUE用于&#34;使用此&#34;并且FALSE不能使用此&#34;。您的子集参数为spl,其类似于TRUE,TRUE,FALSE,....,因此您可以将其直接传递给subset

注意,在逻辑向量的情况下,使用&#34; == TRUE&#34;传递向量。实际上将返回相同的向量:

spl <- c(T,T,T,F,F)

> spl
[1]  TRUE  TRUE  TRUE FALSE FALSE

> spl == TRUE
[1]  TRUE  TRUE  TRUE FALSE FALSE

这就是为什么您可以互换使用splspl==TRUE的原因。