2013-11-20 2 views
0

Рассмотрите следующий код. Я пытаюсь передать параметр main, чтобы изменить заголовок сюжета на «FooBar», но, похоже, он жестко привязан к «Таблице классификации SVM». Я также попытался использовать вызов функции title, но это повлияло на наложение двух названий, что еще более нежелательно. Есть ли обходной путь для этого?Есть ли способ обхода заголовка plot.svm hardcoded?

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

Главное название жестко запрограммировано, поэтому вам необходимо изменить код функции.

Чтобы избежать беспорядка с пакетом, я предложил бы создать копию функции в глобальной среде и использовать ее.

Например:

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]), 
       ...) 

Так что название будет СВН классификация сюжет, или что-то, что вы предоставляете как main параметр

Теперь вы можете использовать его как

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

Можно ли записать измененное определение функции в файл где-то так, что я могу использовать его позже без ручного редактирования кода каждый раз, когда мне нужно, чтобы использовать его ? – merlin2011

+0

@ merlin2011: Я не знаю, есть ли более подходящий способ сделать это ... но я думаю, вы можете просто скопировать код, вставить его в новый файл и затем использовать 'source (filename.R)' at начало скрипта. – nico

+0

Достаточно честный. Мне интересно, считается ли это ошибкой, и я должен на самом деле представить патч для него. – merlin2011

Смежные вопросы