有没有绕过方法可以更改 plot.svm 的硬编码标题?

3
考虑以下代码。我试图传递参数main来将绘图标题更改为"FooBar",但似乎被硬编码为"SVM Classification Plot"。我还尝试使用函数调用title,但这会叠加两个标题,这更加不可取。是否有任何解决方法?
library(e1071)



pdf("Play.pdf")
# Generate data
set.seed(1)
x=matrix(rnorm(200*2),ncol=2)
x[1:100,]=x[1:100,]+2
x[101:150,]=x[101:150,]-2
y=c(rep(1,150),rep(2,50))
dat=data.frame(x=x,y=as.factor(y))

train=sample(200,100)

svmfit=svm(y~.,data=dat[train,],kernel="radial", cost=1, gamma=1)
plot(svmfit,dat[train,], main="FooBar")

dev.off()
2个回答

3

主标题是硬编码的,因此您需要修改函数代码。

为避免与包混淆,建议在全局环境中创建该函数的副本并使用它。

例如:

myplotSVM <- e1071:::plot.svm
environment(myplotSVM)  <- .GlobalEnv
fix(myplotSVM)

那么将函数定义更改为:

function (x, data, formula = NULL, fill = TRUE, grid = 50, slice = list(), 
  symbolPalette = palette(), svSymbol = "x", dataSymbol = "o", 
  main="SVN classification plot", ...) 

并且,在第56行,
plot.title = title(main = main, # <----- change this part!!! 
                xlab = names(lis)[2], ylab = names(lis)[1]), 
                ...)

这样标题将会是SVN分类图,或者您提供的main参数

现在可以这样使用它:

myplotSVM(svmfit,dat[train,], main="FooBar")

@merlin2011:我不知道是否有更合适的方法来做这件事...但我猜你可以只需复制代码,将其粘贴到一个新文件中,然后在脚本开头使用source(filename.R) - nico
如果您认为您经常需要使用它,您可以首先加载 e1071,然后在 .Rprofile 中覆盖它。 - IRTFM
@Dwin:怎么做呢?将整个函数粘贴到.Rprofile中吗? - nico
如果您从未创建过 .Rprofile 文件,则需要创建一个并将编辑后的文件粘贴到 OR 中,或者只需创建一个文本文件并将其重命名为 .Rprofile。它需要在您的工作目录中。根据您的操作系统如何处理点文件,它可能会变得不可见。例如,您可以在 SO 上进行搜索。 - IRTFM
我不知道有任何一种“修补”函数的方式,可以使这个过程更加紧凑。特别是,没有对 R 函数体进行部分编辑的方法。你可以用 body(fn_name) <- { a set of expressions } 替换函数体,但这似乎也不会更加紧凑。 - IRTFM
显示剩余4条评论

1
在我的情况下,我只想在标题中添加一些内容,所以我做了以下操作:
plot(smv_model, test_df, battery_power~ram)
title(main= paste("                                      ", "polynomial", sep=" "))

这里是结果:

enter image description here


1
粗糙、残酷、简单,完成任务。 +1。 - Stephan Kolassa
1
粗糙、残酷、简单,但效果不错。+1。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接