Nie podałeś mi zbyt wiele kontekstu, ani odtwarzalnego kodu, więc podam prosty przykład. Nie jestem zaznajomiony z pakietem Rdsn, więc użyję dostarczenia rozwiązania, które znam.
# create a function to prompt the user for some input
readstuff = function(){
stuff = readline(prompt = "Enter some stuff: ")
# Here is where you set the condition for the parameter
# Let's say you want it to be an integer
stuff = as.integer(stuff)
if(is.na(stuff)){
return(readstuff())
} else {
return(stuff)
}
}
parameter = readstuff()
print(parameter)
print(parameter + 10)
Kluczem tutaj jest „źródłem” skrypt zamiast „działa” go. Możesz znaleźć przycisk "źródło" w prawym górnym rogu RStudio. Możesz także użyć source(yourscript)
, aby go pobrać.
Tak więc dla każdego parametru, który chcesz monitować użytkownika o wprowadzenie, po prostu zadzwoń readstuff()
. Możesz też nieco go poprawić, aby był bardziej ogólny. Na przykład:
# create a function to prompt the user for some input
readstuff = function(promptMessage = "stuff", class = "integer"){
stuff = readline(prompt = paste("Enter the", promptMessage, ": "))
# Here is where you set the condition for the parameter
# Let's say you want it to be an integer
stuff = as(stuff, class)
if(is.na(stuff)){
return(readstuff(promptMessage, class))
} else {
return(stuff)
}
}
plotColor = readstuff("plot color", "character")
size = readstuff("size parameter")
xvarName = readstuff("x axis name", "character")
df = data.frame(x = 1:100, y = 1:100)
library(ggplot2)
p = ggplot(df, aes(x = x, y = y, size = size, color = plotColor)) +
labs(x = xvarName) + geom_point()
print(p)
W if(is.na(stuff))
oświadczenia nie będzie działać, jeśli klasa ma charakter, ale nie będę się w szczegóły, jak to naprawić, ponieważ kwestia ta jest głównie o tym, jak czekać na wejście użytkownika. Istnieją również sposoby, aby ukryć komunikaty ostrzegawcze, jeśli użytkownik wprowadził coś innego niż zamierzony, ale znowu nieco poza tematem, aby o tym tutaj mówić.
Jedną z ważnych rzeczy, na które należy zwrócić uwagę, jest to, że wszystko, co R ma zostać wydrukowane lub wydrukowane, należy opakować za pomocą funkcji print()
. W przeciwnym razie pozyskanie go nie spowoduje drukowania ani drukowania niczego. Ponadto, wpisując parametr, który ma być łańcuchem lub znakiem, nie dodawaj cudzysłowów. Na przykład dla plotColor, w linii poleceń wpisz czerwony zamiast "czerwony".
Większość kodu readline
są odniesione od here:
No nie jest to, co chciałem wiedzieć. Myślałem o sytuacji takiej jak ta: etykieta <-readline ("Powiedz mi, co chcesz być tym małym") Pytanie #ask użytkownika, które wymaga dużo myślenia data.raw <-read.table (...) #read masywny plik data.processed <-do.something (data.raw) #do czas wymagający wykres przetwarzania (data.processed, main = label) #plot dane z parametrem określonym przez użytkownika na początku 'Więc chcę, aby czytanie i przetwarzanie rozpoczyna się natychmiast, aby użytkownik nie został zwolniony przez decyzję o tym, co chce, aby działka zostało oznaczone. –
@MichalSvoboda Cóż, czy użytkownik musi również podać własne dane? lub czy "ogromny plik" jest już uwzględniony? – useR
Chodzi o to, że program najpierw ładuje jakiś duży plik ze wszystkimi danymi, a następnie użytkownik wybiera jakiś podzbiór tego, z którego chce wygenerować raport. Plik nie jest dobrze zorganizowany i wymaga dużo przetwarzania, ale to właśnie mamy - myślałem, że użytkownik może rozpocząć określanie podzbioru przed zakończeniem przetwarzania. Użytkownik nie musi określać ścieżki do pliku ani niczego, ponieważ plik jest taki sam, ale jest stale aktualizowany przez system gromadzenia danych. –