【问题标题】:Error in eval(expr, envir, enclos) : object 'roll_belt' not found in predicteval 中的错误(expr,envir,enclos):在预测中找不到对象“roll_belt”
【发布时间】:2017-02-18 09:08:06
【问题描述】:

在调用中,在代码的末尾:

predict(pml_training_rf_model_1, pml_validation$classe)

我得到错误:

eval(expr, 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)

【问题讨论】:

  • 证明 roll_belt 在 pml_validation$classe 中。因为当 R 说它不存在时,我相信它。
  • 您需要提供一个导致失败的输入数据示例,以便我们可以重现和测试您的问题。谢谢。
  • 感谢@Irnzcig,输入数据加载也包含在代码示例中。

标签: r predict


【解决方案1】:

正确的代码是:

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)

问题也已编辑。

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 2013-10-28
    • 2017-04-02
    • 2015-05-16
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多