Stworzenie systemu podpowiedzi / odpowiedzi do wprowadzania danych do R


84

Stworzyłem kod R do użytku przez ludzi, którzy nic nie wiedzą o R (chociaż sam jestem całkiem zielony). Poprosiłem ludzi o wklejanie początkowych danych do konsoli R (z mieszanymi wynikami) i miałem nadzieję, że stworzę bardziej przyjazny dla użytkownika sposób wprowadzania danych.

W idealnym przypadku ktoś mógłby usiąść przy konsoli, wpisać polecenie i otrzymać konkretne pytania dotyczące wprowadzania danych.

Na przykład osoba ładuje r i widzi monit:

What is x value?

Osoba wpisuje:

2

Następny monit:

What is y value?

Typy osób w:

3

Następny monit:

 What are T values?

Typy osób w:

 4,3,2,1

Następny monit:

Jakie są wartości V?

Typy osób w:

4,5,6,9

Dzięki tym 4 nowo zdefiniowanym zmiennym (X, Y, T, V) następnym krokiem R jest uruchomienie gotowego kodu

X+Y
V+T

W konsoli pojawiają się odpowiedzi

5
8 8 8 10

I wszyscy są szczęśliwi

Przepraszam, ponieważ nie jest to pytanie typu kodu powtarzalnego, ale nie jestem pewien, jak podejść do zadawania pytań w R, a nie do mnie!

Odpowiedzi:


74

Ponieważ ma to być używane tylko jako kod interaktywny, readline()może działać dla Ciebie. Nie dodałem żadnego sprawdzania błędów, ale prawdopodobnie chciałbyś zrobić dużo tego, aby zapewnić prawidłowe dane wejściowe. Oto jednak podstawowa koncepcja:

fun <- function(){
  x <- readline("What is the value of x?")  
  y <- readline("What is the value of y?")
  t <- readline("What are the T values?")
  v <- readline("What are the V values?")

  x <- as.numeric(unlist(strsplit(x, ",")))
  y <- as.numeric(unlist(strsplit(y, ",")))
  t <- as.numeric(unlist(strsplit(t, ",")))
  v <- as.numeric(unlist(strsplit(v, ",")))

  out1 <- x + y
  out2 <- t + v

  return(list(out1, out2))

}

3
Kod działa świetnie! Byłem trochę zdezorientowany, jak go uruchomić, ale po przejrzeniu notatek w readline () właśnie dodałem ostatnią linię do powyższego „if (interact ()) fun ()” i automatycznie uruchamia monit. Dzięki!
Vinterwoo

1
To jest miłe. Próbowałem jednak dokładnie zrozumieć, co się dzieje z funkcjami unlist i strsplit. Co tu robi R?
Seanosapien

1
@Seanosapien Strsplit jest niezbędny do usunięcia przecinków z danych wejściowych, jeśli użytkownik wpisze '"4,3,2,1"', jak w oryginalnym przykładzie. Nie jest to konieczne, jeśli dane wejściowe nie są w tym formacie.
Lauren Fitch

62

Zobacz także ?menuz, utilsaby zapoznać się z prostym tekstowym interfejsem menu i podpowiedzią, które są również używane w programie devtools.

Oto przykład:

> menu(c("Yes", "No"), title="Do you want this?")
Do you want this? 

1: Yes
2: No

Selection:

7

Ponieważ to pytanie zostało przywrócone z martwych, prawdopodobnie jest to zaktualizowana odpowiedź.

Jeśli GUI jest w ogóle pomocne w tym przypadku, pakiet Shiny jest teraz dobrze zintegrowany z RStudio i bardzo łatwo byłoby go zaimplementować jako aplikację Shiny. Witryna http://shiny.rstudio.com zawiera więcej informacji, w tym przykłady i dokumentację.


5

Może to być przesada w tym konkretnym przypadku, ale swirlpakiet jest dobry do interaktywnego wprowadzenia języka R dla początkujących.

swirl to pakiet oprogramowania dla języka programowania R, który zamienia konsolę R w interaktywne środowisko do nauki. Użytkownicy otrzymują natychmiastowe informacje zwrotne, gdy są prowadzeni przez samodzielne lekcje z nauki o danych i programowania R.

Instrukcje dotyczące generowania treści można znaleźć tutaj: http://swirlstats.com/instructors.html .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.