假设我有以下数据集
scorer<-function(points){
points["scores"] <- as.vector((points$X-5)^2+(points$Y-5)^2-9)
points["class"]<-(as.vector( points$scores<0 ))
points
}
dataGenerator<-function(size){
x <- runif( size,1,10)
y <- runif( size,1,10)
data.frame(X=x,Y=y)
}
dataset20 <-scorer( dataGenerator(20))
测试数据
test<-expand.grid(seq(from = 0, to = 10, by = 0.5), seq(from = 0, to = 10, by = 0.5))
colnames(test) <- c("X", "Y")
test<-scorer(test)
test<-test[,-4]
我使用以下代码使用随机森林对class
进行预测
library(randomForest)
rf<- test
rf.mdl =randomForest(class~.,dataset20)
pred<- predict(rf.mdl,test)
rf["class"]<-pred
然后我尝试绘制它
dat <- circleFun(c(5,5),6,npoints = 100)
predocted.As.Inside <- data.frame( x=subset(rf, class==T,)$X,y=subset(rf,class==T,)$Y )
predocted.As.Outside<- data.frame( x=subset(rf, class==F,)$X,y=subset(rf,class==F,)$Y )
ggplot(dat,aes(x,y)) + geom_path()+
geom_point(data=predocted.As.Inside ,shape=21,aes(fill="Predicted Inside" ),size=2)
当我在控制台中运行代码时,它运行良好(逐行使用ctrl+Enter
),但是当我在RStudio中使用knitter
来编译整个文件时,它会抱怨:
Error:Aesthetics must either be length one, or the same as data
在最后一行
更新
circleFun <- function(center ,diameter, npoints = 100){
r = diameter / 2
tt <- seq(0,3*pi,length.out = npoints)
xx <- center[1] + r * cos(tt)
yy <- center[2] + r * sin(tt)
return(data.frame(x = xx, y = yy))
}