在R中的sample.split出错,'SplitRatio'参数必须是i [0,1]

时间:2016-03-30 17:34:18

标签: r split

我需要分析消极或正面的短信,并找出哪些词定义了正面或负面的文字。此时,我需要在测试集和训练集之间分割数据。但是,这种情况发生了:

library(caTools)
split = sample.split(smsSparse$sentiment, SplitRatio = .7)
# Error in sample.split(smsSparse$sentiment, SplitRatio = 0.7) : 
#   Error in sample.split: 'SplitRatio' parameter has to be i [0, 1] range or [1, length(Y)] range

根据this帖子的建议,我将“smsSparse $ Negative = sms $ Negative ”更改为“smsSparse $ Negative = sms $ negative ”,但它没有帮助。我也尝试了7/10和0,7而不是0.7。结果相同。

有人可以告诉我为什么R认为0.7不在0和1之间吗?

6 个答案:

答案 0 :(得分:1)

我以前从未使用过sample.split函数。但是,通常我不使用这样的函数对数据进行分区。例如,假设我想将虹膜数据集划分为训练和测试数据集,我希望训练大约是原始数据集大小的70%。然后我可以这样做:

data(iris)

#Create a random sample of integers sample from 1 to nrow(iris)
samp <- sample(1:nrow(iris), size=round(0.7*nrow(iris)), replace=FALSE)

train <- iris[samp,]  #Only takes rows that are in samp
test <- iris[-samp,] #Omits the rows that were in samp

除了,[samp,]中不需要[-samp,]之外,对向量也可以这样做。我希望有所帮助。否则,也许提供前6个条目smsSparse $情绪可能会帮助人们识别问题。

答案 1 :(得分:0)

检查smsSparse$sentiment是否正确分配。如果在cbind期间发生任何错误或任何拼写错误,R会抛出这样的错误。

答案 2 :(得分:0)

正如有人提到的那样,这可能是一个赋值错误,ex拼写错误,或者该列不存在或为null,或者即使您基于其分割的列(因变量)不是一个因素,在哪种情况下,您可以将其转换为一个。 要快速检查,您可以看到smsSparse $情绪的摘要并确认。

答案 3 :(得分:0)

set.seed(1000) library(caTools) split = sample.split(letters$isB, SplitRatio = 0.5)

isB应该是因变量的标签,在数据集中查找该名称。

Here,您可以找到引发此错误的原因。

答案 4 :(得分:0)

查看R中定义的 sample.split 函数的代码,您将看到以下代码行

if (SplitRatio >= nSamp)
    stop("Error in sample.split: 'SplitRatio' parameter has to be i [0, 1] range or [1, length(Y)] range")

可能有2个原因导致此错误 1)您的数据长度小于SplitRatio 2)split函数的第一个参数为空。

确保要传递的FirstParamter中有数据。

答案 5 :(得分:0)

sample.split实际上在安装和启用软件包caTool时有效。 您可以通过

进行安装
install.packages('caTools')

然后通过

启用它
library('caTools')

运行完以上几行之后,您可以执行以下操作

split = sample.split(smsSparse$sentiment, SplitRatio = 0.7)

例如,如果您的数据集被称为数据集

然后您可以做类似的事情

training_set = subset(dataset, split == TRUE)
test_set = subset(dataset, split == FALSE)