Ошибка в xj [i]: недопустимый тип индекса «list» при выполнении LDA в R - PullRequest
2 голосов
/ 16 марта 2019
mydat=structure(list(spent = c(73.5, 73.5, 73.5, 73.5, 73.5, 73.5, 
73.5, 73.5, 73.5, 73.5, 73.5, 29.74, 29.74, 29.74, 29.74, 29.74, 
29.74, 29.74, 29.74, 29.74, 29.74, 29.74, 73.71, 73.71, 73.71, 
73.71, 73.71, 73.71, 73.5, 73.5, 73.5, 73.5, 73.5, 73.5, 73.5, 
73.5, 73.5, 73.5, 73.5, 29.74, 29.74, 29.74, 29.74, 29.74, 29.74, 
29.74, 29.74, 29.74, 29.74, 29.74, 73.71, 73.71, 73.71, 73.71, 
73.71, 73.71), realpurchase_cash = c(501, 502, 503, 504, 505, 
506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 
519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 73.5, 73.5, 
73.5, 73.5, 73.5, 73.5, 73.5, 73.5, 73.5, 73.5, 73.5, 29.74, 
29.74, 29.74, 29.74, 29.74, 29.74, 29.74, 29.74, 29.74, 29.74, 
29.74, 73.71, 73.71, 73.71, 73.71, 73.71, 73.71), id = c(123L, 
123L, 123L, 123L, 123L, 123L, 123L, 123L, 123L, 123L, 123L, 123L, 
123L, 123L, 123L, 123L, 123L, 123L, 123L, 123L, 123L, 123L, 123L, 
123L, 123L, 123L, 123L, 123L, 124L, 124L, 124L, 124L, 124L, 124L, 
124L, 124L, 124L, 124L, 124L, 124L, 124L, 124L, 124L, 124L, 124L, 
124L, 124L, 124L, 124L, 124L, 124L, 124L, 124L, 124L, 124L, 124L
), flag = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("spent", 
"realpurchase_cash", "id", "flag"), class = "data.frame", row.names = c(NA, 
-56L))

Я хочу выполнить линейный дискриминантный анализ.(функция lda происходит из библиотеки MASS)

здесь мой код

index <- sample(1:nrow(mydat),round(0.70*nrow(mydat)))
train <- mydat[index,]
test <- mydat[-index,]
library("MASS")
fit=lda(flag~spent+realpurchase_cash, mydat, subset = train)
library("caret") 
str(mydat)
library(InformationValue)
predicted <- predict(fit,test,type='response')
optCutOff <- optimalCutoff(test$flag, predicted)[1] 
confusionMatrix(test$flag, predicted, threshold = optCutOff)

, но после этой строки

fit=lda(flag~spent+realpurchase_cash, mydat, subset = train)

я получаю ошибку

Error in xj[i] : invalid subscript type 'list'

Как исправить эту ошибку.Что не так?

1 Ответ

2 голосов
/ 16 марта 2019

subset хочет вектор, а вы даете ему фрейм данных (то есть список). Do

lda(flag ~ spent + realpurchase_cash, mydat, subset=index)

или, поскольку train уже является вашим желаемым подмножеством, просто

lda(flag ~ spent + realpurchase_cash, data=train)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...