Übergeben Sie Variablen-Namen zu zeichnen-Funktion Titel
Ich Frage mich, wenn jemand könnte mir helfen, verwenden Sie den Namen einer Variablen innerhalb einer Funktion.
Ich habe eine dot-plot, die möglichen Variablen und erzeugt dann ein bitmap, aber ich kann Sie nicht R
übergeben den Namen der Variablen, um die plot
Titel.
Beispiel Daten
id<-c(1,2,3)
blood<-c(1,2,10)
weight<-c(1,2,13)
mydata<-as.data.frame(cbind(id,blood,weight))
mydata$blood
#######SORTED DOT PLOT####
Dplotter<-function (id,x,Title=""){
if (is.null(Title)) {Title=""} else {Title=Title}
DIR<-paste("C:/temp/WholePlots/New/",Title,".bmp",sep="")
D<-as.data.frame(cbind(id,x))
x1<-as.data.frame(D[order(x),])
bmp(DIR)
dotchart(x1$x,labels=id,main=Title,pch=16)
dev.off()
}
###############
Dplotter(mydata$id,mydata$blood,"Blood")
Dplotter(mydata$id,mydata$weight,"Weight")
-
In der zweiten Zeile der Funktion ist, würde ich gerne pass auf die variable
Namen, so etwas wie`if (is.null(Title)) {Title=varname(x)} else {Title=Title}`
so, dass ich nicht haben, um "Blut" in der Funktion Titel-Feld
(z.B. Dplotter(mydata$id,mydata$Blut)Grundsätzlich, wie stellt man das einfügen in den Namen der Variablen in einer Funktion? Es
wäre noch besser, wenn man nehmen könnte, aus der dataset-name aus dem
Titel (ohne anbringen des dataset, die ich habe gesagt, schlecht ist
Praxis), so dass anstattmydata$blood
, die Sie gerade bekommen
"blood" im Titel.Habe ich konnte nicht finden eine einfache Lösung zum einfügen von Variablen-Namen in der
eine Funktion ist. Wie Sie sich vorstellen können, setzen Sie den Variablennamen in einer
paste()
Funktion gibt die Werte der Variablen (so, dass die
plot-Titel ist mit Werten gefüllt, sondern der name der Variablen). -
Ich würde auch gerne automatisieren, um die Funktion noch weiter, so dass ich
setzen Sie einfach den Datensatz und die ID,und dann haben die Funktion wiederholt
für jede variable im Datensatz. Offensichtlich verlangt dies die Lösung
Frage 1 zunächst anders beiden Titel und Dateinamen begegnen
Probleme.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Allgemeine Antwort ist
deparse(substitute(x))
. E. g.Hier ist es im Einsatz:
Produziert:
In deinem Beispiel aber, das wird nicht funktionieren, weil Sie nicht wollen
dat$x
als der Titel, Sie wollen nurx
. Wir könnten noch ein wenig mehr manipulation jedoch:Welche für
fooPlot(dat$x, col = "red")
gibt:Hinweis: dieser code macht einige Annahmen, dass
main
ist nicht ein Vektor sein, dass es immer nur eine$
in das übergebene Objekt Grundstück (d.h. Sie könnte nicht verwenden Sie eine verschachtelte Liste zum Beispiel mit dem obigen code).Müssen Sie zum abrufen eines Satzes von Zeichenfolgen, die Namen der Variablen, und verwenden Sie für den Titel Ihrer Grundstücke und Dateinamen als gut.
Ich werde mit der longley Datensatz zur Veranschaulichung der trick.
Zeichnen jede variable, zwei Sätze von Zeichenfolgen: Variablen-und Dateinamen:
ylab="", da sonst es gibt eine dumme "longley[[i]]" als y-label, und wenn ich mit var.name[i] als ylab, es wäre überflüssig.