Ошибка: `i` должно иметь одно измерение, а не 2. в CreateDataPartition в R - PullRequest
1 голос
/ 08 апреля 2020

Я выполняю часть кода, которую я успешно выполнял несколько раз раньше, и теперь я получаю странную ошибку, которую я не понимаю:

### Data Splitting

trainIndex <- createDataPartition(dataset$isTerminated, p = .8, 
                                  list = FALSE, 
                                  times = 1)

head(trainIndex)

# Step 2: Create the training  and testing datasets

testData  <- dataset[-trainIndex, ]
trainingData <- dataset[trainIndex, ]

testData <- dataset[-trainIndex, ] работает нормально, но когда я запускаю trainingData <- dataset[trainIndex, ] выдает ошибку Error: i must have one dimension, not 2.

Я проверил код по https://topepo.github.io/caret/data-splitting.html и он совпадает. Кто-нибудь еще сталкивался с этим и нашел решение?

Ответы [ 3 ]

0 голосов
/ 09 апреля 2020

Код работает для data.frame:

library(caret)
dataset = data.frame(isTerminated=sample(0:1,100,replace=TRUE),
value=runif(100))
trainIndex <- createDataPartition(dataset$isTerminated, p = .8, 
                                  list = FALSE, 
                                  times = 1)

testData  <- dataset[-trainIndex, ]
trainingData <- dataset[trainIndex, ]

trainIndex - это матрица, а подмножество с матрицей работает для data.frames и матриц. То, что у вас есть, это тиббл:

library(tibble)
dataset = tibble(dataset)
dataset[trainIndex,]
Error: `i` must have one dimension, not 2.

Я действительно понятия не имею, почему будет работать добавление -trainIndex. Вы можете увидеть, что это также работает, если вы преобразуете его в вектор:

dataset[c(trainIndex),]
# A tibble: 80 x 2
   isTerminated  value
          <int>  <dbl>
 1            0 0.412 
 2            1 0.488 
 3            1 0.395 
 4            0 0.212 
 5            0 0.0229
 6            0 0.0395
 7            0 0.883 
 8            0 0.601 
 9            0 0.524 
10            0 0.998 
# … with 70 more rows

Надеюсь, что кто-то лучше разбирается в tibble, но да, суть в том, чтобы знать, является ли это data.frame или tibble ..

0 голосов
/ 07 мая 2020

Проверьте класс ваших данных. Если это тиббл, преобразуйте его в data.frame.

0 голосов
/ 08 апреля 2020

Я обошел его с помощью sample.split (). Я не уверен, что вызвало проблему, хотя.

sample          = sample.split(dataset$isTerminated, SplitRatio = 0.75)
trainingData    = subset(dataset, sample == TRUE)
testData        = subset(dataset, sample == FALSE)

Кажется, это работает нормально

...