简体   繁体   English

对保存的数据和 model (.RData) 使用预测时,是什么导致 R 错误“无适用方法”?

[英]What is causing R error "no applicable method" when using predict on saved data and model (.RData)?

I'm new to R. I have an issue, but haven't found solutions that work for me.我是 R 的新手。我有一个问题,但还没有找到适合我的解决方案。

When calling prediction on a saved object, I get the following error: Error in UseMethod("predict"): no applicable method for 'predict' applied to an object of class "character"在对已保存的 object 调用预测时,出现以下错误:UseMethod("predict") 中的错误:没有适用于“预测”的方法应用于 class“字符”的 object

Note that after loading the saved objects, they show Values in my environment.请注意,加载保存的对象后,它们会在我的环境中显示 But, when they are first created, they show up as Data .但是,当它们首次创建时,它们显示为Data Perhaps this is a save/load issue, but I don't see it.也许这是一个保存/加载问题,但我没有看到。

I have the following:我有以下内容:

  1. Reloaded libraries.重新加载库。 No change ( Prediction using saved model object )没有变化( 预测使用保存的 model object
  2. Tried solution to #94 ( https://github.com/facebook/prophet/issues/94 ), and gotten another error (maybe that's about Prophet and not R?): Error in loadNamespace(name): there is no package called 'devtools'尝试解决 #94 ( https://github.com/facebook/prophet/issues/94 ),并得到另一个错误(也许是关于 Prophet 而不是 R?): loadNamespace(name) 错误:没有调用 package '开发工具'
## Load required packages
required.packages = c("ggplot2", "readr", "tidyr", "tree")
lapply (required.packages, require, character.only=TRUE)

## Load data 
data.all <- read.csv("BreastCancerWisconsinDataSet.csv")

## Some simple cleaning and set up
 
# set the target: we are trying to predict whether a diagnosis is malignant (M) or benign (B).
data.all$target [data.all$diagnosis == "M"] = 1
data.all$target [data.all$diagnosis == "B"] = 0

# all variables available for training
vars <- names(data.all)[c(-1, -2, -33)]
data.all <- data.all[c(-1, -2, -33)]

# split data into training vs testing
set.seed(1000)
data.all$rand <- runif(nrow(data.all))
data.training <- data.all[which(data.all$rand <= 0.5), ] 
data.testing <- data.all[which(data.all$rand > 0.5), ]

##
# Save the data.all, data.training and data.testing objects into appropriately named .RData files
##
save(data.all, file = "Chunk_13_35_data_all.RData")
save(data.training, file = "Chunk_13_35_data_training.RData")
save(data.testing, file = "Chunk_13_35_data_testing.RData")


## Clean up (dont need data.all anymore)
rm(data.all)

## Fit a simple decision tree model
Tree.m1 <- tree (target ~ radius_mean + 
                           texture_mean +
                           perimeter_mean +
                           area_mean +
                           smoothness_mean  + 
                           compactness_mean +
                           concavity_mean   +
                           concave.points_mean +
                           symmetry_mean, 
                 data = data.training)

##
# Save the Tree.m1 model into and appropriately named .RData file
##
save(Tree.m1, file = "Chunk_13_35_tree_m1.RData")

## Predict results - re-run this code after you reload the objects you saved. Make sure the results are the same!
Tree.m1.pred.train = predict(Tree.m1, data.training, type = "vector")
Tree.m1.pred.train  = ifelse(Tree.m1.pred.train > 0.5, 1, 0)
error = mean(Tree.m1.pred.train != data.training$target)
print(paste('Tree Training Model Accuracy', 1-error))

Tree.m1.pred.test = predict(Tree.m1, data.testing, type = "vector")
Tree.m1.pred.test = ifelse(Tree.m1.pred.test > 0.5, 1, 0)
error = mean(Tree.m1.pred.test != data.testing$target)
print(paste('Tree Testing Model Accuracy', 1-error))

## Clean up
rm(list = ls()) # This will remove all objects in the environment

######
# Check that can run on saved objects
######

required.packages = c("ggplot2", "readr", "tidyr", "tree")
lapply (required.packages, require, character.only=TRUE)

# Note that tried to add devtools line here.

data.training <- load("Chunk_13_35_data_training.RData")
data.testing <- load("Chunk_13_35_data_testing.RData")
Tree.m1 <- load("Chunk_13_35_tree_m1.RData")

Tree.m1.pred.train = predict(Tree.m1, data.training, type = "vector")   # Error occurs here
Tree.m1.pred.train  = ifelse(Tree.m1.pred.train > 0.5, 1, 0)
error = mean(Tree.m1.pred.train != data.training$target)
print(paste('Tree Training Model Accuracy', 1-error))

Tree.m1.pred.test = predict(Tree.m1, data.testing, type = "vector")
Tree.m1.pred.test = ifelse(Tree.m1.pred.test > 0.5, 1, 0)
error = mean(Tree.m1.pred.test != data.testing$target)
print(paste('Tree Testing Model Accuracy', 1-error))

If you want to load the object that is written by "save" command, then when you want to load it, you shouldn't have to assign it.如果你想加载由“save”命令写入的object,那么当你想加载它时,你不应该分配它。 Please check the following code:请检查以下代码:

required.packages = c("ggplot2", "readr", "tidyr", "tree")
lapply (required.packages, require, character.only=TRUE)

## Load data 
data.all <- read.csv("BreastCancerWisconsinDataSet.csv")

## Some simple cleaning and set up

# set the target: we are trying to predict whether a diagnosis is malignant (M) or benign (B).
data.all$target [data.all$diagnosis == "M"] = 1
data.all$target [data.all$diagnosis == "B"] = 0

# all variables available for training
vars <- names(data.all)[c(-1, -2, -33)]
data.all <- data.all[c(-1, -2, -33)]

# split data into training vs testing
set.seed(1000)
data.all$rand <- runif(nrow(data.all))
data.training <- data.all[which(data.all$rand <= 0.5), ] 
data.testing <- data.all[which(data.all$rand > 0.5), ]

##
# Save the data.all, data.training and data.testing objects into appropriately named .RData files
##
save(data.all, file = "Chunk_13_35_data_all.RData")
save(data.training, file = "Chunk_13_35_data_training.RData")
save(data.testing, file = "Chunk_13_35_data_testing.RData")


## Clean up (dont need data.all anymore)
rm(data.all)

## Fit a simple decision tree model
Tree.m1 <- tree (target ~ radius_mean + 
                   texture_mean +
                   perimeter_mean +
                   area_mean +
                   smoothness_mean  + 
                   compactness_mean +
                   concavity_mean   +
                   concave.points_mean +
                   symmetry_mean, 
                 data = data.training)

##
# Save the Tree.m1 model into and appropriately named .RData file
##
save(Tree.m1, file = "Chunk_13_35_tree_m1.RData")

## Predict results - re-run this code after you reload the objects you saved. Make sure the results are the same!
Tree.m1.pred.train = predict(Tree.m1, data.training, type = "vector")
Tree.m1.pred.train  = ifelse(Tree.m1.pred.train > 0.5, 1, 0)
error = mean(Tree.m1.pred.train != data.training$target)
print(paste('Tree Training Model Accuracy', 1-error))

Tree.m1.pred.test = predict(Tree.m1, data.testing, type = "vector")
Tree.m1.pred.test = ifelse(Tree.m1.pred.test > 0.5, 1, 0)
error = mean(Tree.m1.pred.test != data.testing$target)
print(paste('Tree Testing Model Accuracy', 1-error))

## Clean up
rm(list = ls()) # This will remove all objects in the environment

######
# Check that can run on saved objects
######

required.packages = c("ggplot2", "readr", "tidyr", "tree")
lapply (required.packages, require, character.only=TRUE)

# Note that tried to add devtools line here.

load("Chunk_13_35_data_training.RData")
load("Chunk_13_35_data_testing.RData")
load("Chunk_13_35_tree_m1.RData")

Tree.m1.pred.train = predict(Tree.m1, data.training, type = "vector")   # Error occurs here
Tree.m1.pred.train  = ifelse(Tree.m1.pred.train > 0.5, 1, 0)
error = mean(Tree.m1.pred.train != data.training$target)
print(paste('Tree Training Model Accuracy', 1-error))

Tree.m1.pred.test = predict(Tree.m1, data.testing, type = "vector")
Tree.m1.pred.test = ifelse(Tree.m1.pred.test > 0.5, 1, 0)
error = mean(Tree.m1.pred.test != data.testing$target)
print(paste('Tree Testing Model Accuracy', 1-error))

That's work for me actually.这实际上对我有用。

Furthermore, if you want to save the object then load it with the assigned variable, try using command "saveRDS" then "readRDS" instead.此外,如果您想保存 object 然后用分配的变量加载它,请尝试使用命令“saveRDS”然后“readRDS”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用Dropbox API读取R中的原始数据以另存为.RData文件 - reading raw data in R to be saved as .RData file using the dropbox api R中的错误:没有适用于“预测”的适用方法应用于“ NULL”类的对象 - Error in R: no applicable method for 'predict' applied to an object of class “NULL” R中的错误-没有适用于“预测”类别的对象的“预测”方法 - Error in R - no applicable method for 'predict' applied to an object of class “formula” R函数错误,“对“ NULL”类的对象没有适用的“预测”适用方法 - R function error, “no applicable method for 'predict' applied to an object of class ”NULL" UseMethod(“ predict”)中的错误:R中没有适用于&#39;predict&#39;的适用方法,该方法适用于R中的类“ c(&#39;uGARCHfit&#39;,&#39;GARCHfit&#39;,&#39;rGARCH&#39;)”的对象 - Error in UseMethod(“predict”) : no applicable method for 'predict' applied to an object of class “c('uGARCHfit', 'GARCHfit', 'rGARCH')” in R 使用随机森林 model 预测测试数据时出错 - Error when using Random Forest model to predict test data R中的错误:&#39;xpathApply&#39;没有适用的方法 - Error in R: no applicable method for 'xpathApply' 将模型应用于测试数据集以使用 Caret&#39;s Train 方法预测 R 中的标签的问题 - Problems on applying model to a test data set to predict label in R using Caret's Train method ARIMA in r…使用predict()进行预测时出错 - ARIMA in r…Error when forecasting using predict() 在R中对randomForest使用predict()时出错 - Error when using predict() with randomForest in R
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM