2017-02-18 14 views
-1

В вызове, в конце кода, чтобы:Ошибка в Eval (выражение, ENVIR, Enclos): объект 'roll_belt' не найден в предсказать

predict(pml_training_rf_model_1, pml_validation$classe) 

Я получаю ошибку:

Ошибка в Eval (выражение, Envir, Enclos): объект 'roll_belt' не найден

это потому, что я должен вызвать функцию так:

predict(pml_training_rf_model_1, pml_validation) 

Атрибут «roll_belt» появляется в кадрах данных, которые я использую, поэтому я явно делал другую ошибку, которая теперь исправлена ​​и сохраняется для потомков.

#Start code 

rm(list=ls()) 
library("caret") 
library("data.table") 
library("randomForest") 

set.seed(12345) 
pml_training_file <- "pml-training.csv" 
pml_testing_file <- "pml-testing.csv" 

if (!file.exists(pml_training_file)) { 
    pml_training_url <- "http://d396qusza40orc.cloudfront.net/predmachlearn/pml-training.csv" 
    download.file(pml_training_url, pml_training_file) 
} 

pml_testing_file <- "pml-testing.csv" 
if (!file.exists(pml_testing_file)) { 
    pml_testing_url <- "http://d396qusza40orc.cloudfront.net/predmachlearn/pml-testing.csv" 
    download.file(pml_testing_url, pml_testing_file) 
} 

pml_training_original <- fread(pml_training_file, na.strings=c("NA","#DIV/0!",""), data.table = FALSE, stringsAsFactors = TRUE) 

partition_index <- createDataPartition(y=pml_training_original$classe, p=0.6, list = FALSE) 
pml_training <- pml_training_original[partition_index,] 
pml_validation <- pml_training_original[-partition_index,] 

#Remove metadata columns 
pml_training <- pml_training[,-c(1:7)] 

#Remove columns where the number of NA results is above a given level 
na_level = .75 
nrow_pml_training = nrow(pml_training) 
na_col_nums <- numeric() 
for(i in 1:length(pml_training)) { 
    sum_na = sum(is.na(pml_training[, i])) 
    if(sum_na/nrow_pml_training >= na_level) { 
    na_col_nums <- c(na_col_nums, i)   
    } 
} 
pml_training <- pml_training[-na_col_nums] 

#Set the columns in the validation data to be the same as those in the training data 
pml_training_colnames <- colnames(pml_training) 
pml_validation <- pml_validation[, pml_training_colnames] 

pml_training_rf_model_1 <- randomForest(classe ~ ., data=pml_training) 
#Wrong! pml_training_predictions_1 <- predict(pml_training_rf_model_1, pml_validation$classe) 
pml_training_predictions_1 <- predict(pml_training_rf_model_1, pml_validation) 
confusionMatrix(pml_validation$classe, pml_training_predictions_1) 
+0

Доказательство того, что roll_belt находится в pml_validation $ classe. Потому что я верю R, когда говорит, что его там нет. – Roland

+0

Вам нужно будет предоставить пример входных данных, которые приведут к сбою, так что мы сможем воспроизвести и протестировать вашу проблему. Благодарю. – lrnzcig

+0

Благодаря @Irnzcig загрузка входных данных также включена в образец кода. –

ответ

0

Правильный код:

pml_training_rf_model_1 <- randomForest(classe ~ ., data=pml_training) 
pml_training_predictions_1 <- predict(pml_training_rf_model_1, pml_validation) 
confusionMatrix(pml_validation$classe, pml_training_predictions_1) 

Вопрос отредактирован также.