Я хотел бы предварить свой вопрос, заявив, что это распространенная проблема:
- Неправильное разделение данных использование sample.split в R и проблема с логистической регрессией
- Результаты SplitRatio с помощью sample.split (caTools)
Тем не менее, я не могу решить свою проблему, используя решения, рекомендованные в первом вопросе, а на второй так и не ответили.
В следующем коде я ожидаю 100 наблюдений для каждого из четырех результатов, поскольку очевидно, что 100/150 = 2/3:
library(caTools)
set.seed(123)
isample <- sample.split(iris[,1], SplitRatio = 2/3, group = NULL)
iris2 <- iris[isample,]
isample2 <- sample.split(iris[,1], SplitRatio = 2/3, group = NULL)
iris3 <- subset(iris, isample2 == T)
isample3 <- sample.split(iris$Sepal.Length, SplitRatio = 2/3, group = NULL)
sepal.length2 <- iris[isample3,1]
isample4 <- sample.split(iris$Sepal.Length, SplitRatio = 2/3, group = NULL)
sepal.length3 <- subset(iris[,1], isample4 == T)
Однако я получаю 104 наблюдения как в iris2
, так и в iris3
, а также в векторах sepal.length2
и sepal.length3
. Я каждый раз рисую новую выборку, чтобы убедиться, что это не что-то странное с округлением в функции выборки. Использование столбцов 2 и 3 из iris
возвращает 100 наблюдений, а использование столбца 5 возвращает 99 наблюдений. Почему изменение столбца возвращает разные значения? Распространенная ошибка этой функции заключается в том, что она случайно передает ей весь фрейм данных, поэтому она выбирает на основе столбцов, но здесь я каждый раз задаю ей вектор. В последних двух примерах я задаю вектор, а затем определяю разбиение по вектору, и это все равно не работает.
Если это поможет, я запускаю R 3.6.0 и caTools 1.18.0 на OS X. Обычно я использую функцию sample
или sample.int
, поэтому я не очень хорошо знаком с caTools.