在Hadley Wickham的第10.3章中的ggplot2一书中,他提到了制作情节功能.我想制作许多使用刻面的类似图,但我不能引用列.如果我的所有引用都是美学的,那么我可以使用aes_string,一切正常.Facet_wrap似乎没有类似的东西.
library(ggplot2)
data(iris)
Run Code Online (Sandbox Code Playgroud)
这是我想要功能化的情节.
pl.flower1 <- ggplot(data=iris,
aes_string(x='Sepal.Length', y='Sepal.Width', color='Petal.Length')) +
geom_point() +facet_wrap(~Species)
Run Code Online (Sandbox Code Playgroud)
如果我不这样做,这是有效的.
flowerPlot <- function(dat, sl, sw, pl, sp){
ggplot(data=dat, aes_string(x=sl, y=sw, color=pl)) + geom_point()
}
pl.flower2 <- flowerPlot(iris, sl='Sepal.Length', sw='Sepal.Width', pl='Petal.Length')
Run Code Online (Sandbox Code Playgroud)
"sp"应该是下面的两行?一个公式,一个字符串?也许整个方法都是错误的.
flowerPlotWrap <- function(dat, sl, sw, pl, sp){
ggplot(data=dat, aes_string(x=sl, y=sw, color=pl)) + geom_point() +facet_wrap(sp)
}
pl.flower3 <- flowerPlotWrap(iris, sl='Sepal.Length', sw='Sepal.Width', pl='Petal.Length', sp= ?????)
Run Code Online (Sandbox Code Playgroud)
除了答案,我会喜欢指向任何人如何解决这个问题?
这个问题类似于Stackoverflow上的一些其他问题(这里,这里和这里),但是不同,所以我不能将这些答案推断到我的案例中.
我有一个功能,我适合C5.0模型,而不是尝试绘制模型.
train_d <- globald[train_ind,c(features,21)]
model <- C5.0(binclass ~ .,data=train_d,trials=10)
Run Code Online (Sandbox Code Playgroud)
binclass是我的训练/测试数据中的列名称(globald是一个数据框,我从中对具有_ind索引和列的行进行子集c(3:12,21),其中第21列被命名binclass).配件效果很好.但是,当我也添加该行
plot(model,trial=0)
Run Code Online (Sandbox Code Playgroud)
然后我收到以下错误:Error in is.data.frame(data) : object 'train_d' not found.
如何在适合模型时train_d找到并正确使用,但在绘图时,train_d无处可寻?并且,有关如何解决此问题的任何建议.[r]中的命名空间对我来说仍然是一个谜.
一个最小的运行示例如下:
f <- function(){
library(C50)
set.seed(1)
class = c(1,2)
d <- data.frame(feature1 = sample(1:10,10,replace=TRUE), feature2 = 1:10, binclass = class)
d$binclass <- as.factor(d$binclass)
model <- C5.0(binclass ~ ., data=d)
plot(model)
}
Run Code Online (Sandbox Code Playgroud)
调用会f()导致以下错误:Error in is.data.frame(data) : object 'd' …