[英]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:我有以下内容:
## 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.