wenn ich richtig verstehe, ist, Sie wollen oft angeben, wie die Ausführung einer Funktion zu wiederholen programmatisch interaktiv, nicht. Sie können dies tun, mit readline
:
Ich brauche eine Funktion, die mir eine Möglichkeit gibt, die Anzahl der Wiederholungen
# some function
funcA <- function(){
cat("i am funcA\n")
}
# some function that interactively repeats funcA a specified amount of times
doNTimesA <- function() {
Ntimes <- readline("number of repeats: ")
for (i in 1:Ntimes) funcA()
}
doNTimesA()
Ich meine, eine Funktion, die mich fragt, zu entscheiden, ob ich will oder nicht
funcB <- function(){
while (TRUE) {
cat("i am funcB\n")
continue <- readline("again? y/n: ")
if (tolower(continue)=="n") break
}
cat("funcB is done")
}
funcB()
bearbeiten, um fortzufahren: für Sie In einem speziellen Fall können Sie Ihre Funktionsdeklaration in eine while
Schleife schreiben, die Sie fragt, ob Sie fortfahren möchten, wie in meinem Beispiel funcB
oben. aktualisiert, wo es speichert auch seine Ausgabe:
func <- function(){
#initiate an iteration counter and an outputlist
counter <- 1
output <- list()
#start an infinite loop
while (TRUE) {
#do your thing
id.co1 <- identify(f$speed, f$dist,labels=row.names(f), n = 2, pos = TRUE,plot = TRUE)
xy <- f[c(id.co1$ind[1],id.co1$ind[2]),]
lines(xy, col="red", lwd=5)
lm(dist~speed, xy)
abline(coef(lm(dist~speed, xy)),col="blue")
x.co1 <- f$speed[id.co1$ind[1]:id.co1$ind[2]]
y.co1 <- f$dist[id.co1$ind[1]:id.co1$ind[2]]
m.co1 <- lm(y.co1 ~ x.co1)
#store the result at counter index in the outputlist
output[[counter]] <- list(xco =x.co1, yco=y.co1, lm =m.co1)
counter <- counter+1
#prompt for next iteration
continue <- readline("again? y/n: ")
#break the loop if the answer is 'n' or 'N'
if (tolower(continue)=="n") break
}
#return your output
output
}
Was das nach jeder Iteration jetzt geschieht, fragt die Funktion, wenn Sie die Funktion erneut ausführen wollen: continue <- readline("again? y/n: ")
und prüft, ob Sie N
oder n
beantwortet haben. Sie können weitere Prüfungen der Antwort hinzufügen, wenn Sie möchten; Wenn Sie jetzt nichts außer N
oder n
beantworten, wird die Schleife erneut ausgeführt.
Wenn Sie laufen all <- func()
, nachdem Sie Sie fertig sind kann Ergebnis jeweils Iterationen zugreifen all[[1]]
verwenden, all[[2]]
usw.
Bitte beachten Sie, dass es in der Regel verpönt Objekte außerhalb des Funktions Umwelt zu manipulieren, so würde es Seien Sie sauberer, um die ursprüngliche Plotgenerierung in Ihre Funktion zu übernehmen.
Während es scheint, dass Sie ein reproduzierbares Beispiel haben, ist 'Autos' unbekannt. Probieren Sie es selbst in einem leeren R-Skript aus. – Parfait
@Parfait, run require (stats); benötigen (Grafiken), dann haben Sie Zugriff auf Autos Datensatz. – Marco
Bist du sicher? Diese sind Basispakete und sollten bereits verfügbar sein. Bitte aktualisieren Sie Ihren Code mit allen relevanten 'library' oder' require' Zeilen und Objektzuordnungen. Testen Sie die Reproduzierbarkeit in einer sauberen, neuen R-Umgebung. Sehen Sie dies häufig [zitierter Beitrag] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – Parfait