Створення системи підказки / відповіді для введення даних у R


83

Я створив деякий код R для використання людьми, які нічого не знають про R (хоча я сам досить зелений). Мені доводилось, щоб люди вставляли вихідні дані на консоль R (зі змішаними результатами), і я сподівався створити більш зручний для людей спосіб введення даних.

В ідеалі хтось міг би сісти за консоль, набрати команду і запропонувати конкретні запитання щодо введення даних.

Наприклад, людина завантажує r і бачить підказку:

What is x value?

Людина вводить:

2

Наступна підказка:

What is y value?

Типи осіб у:

3

Наступна підказка:

 What are T values?

Типи осіб у:

 4,3,2,1

Наступна підказка:

Що таке значення V?

Типи осіб у:

4,5,6,9

І з цими 4 нещодавно визначеними змінними (X, Y, T, V) наступним кроком R є запуск попередньо записаного коду

X+Y
V+T

І в консолі відповіді спливають

5
8 8 8 10

І всі задоволені

Приношу свої вибачення, оскільки це не відтворюване питання типу коду, але я не впевнений, як підходити до того, щоб R задавав питання, на відміну від того, що я задаю питання про R!

Відповіді:


74

Оскільки це повинно використовуватися лише як інтерактивний код, це readline()може працювати для вас. Я не додав жодної перевірки помилок, але ви, мабуть, захочете зробити це досить багато, щоб забезпечити належний ввід. Ось основна концепція:

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
Код чудово працює! Я трохи розгубився, як його запустити, але, переглянувши примітки на readline (), я просто додав останній рядок до вищезазначеного "if (interactive ()) fun ()", і він автоматично запускає підказку. Дякую!
Vinterwoo

1
Це добре. Однак я намагався зрозуміти, що саме відбувається з функціями unlist та strsplit. Що тут робить Р?
Seanosapien

1
@Seanosapien Strsplit необхідний для видалення коми з вводу, якщо користувач вводить "4,3,2,1" ', як у оригінальному прикладі. Це не потрібно, якщо введення не в такому форматі.
Лорен Фітч

58

Дивіться також ?menuвід utilsдля простого інтерфейсу меню тексту бази і підказка, яка також використовується в devtools.

Ось приклад:

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

1: Yes
2: No

Selection:

7

Оскільки це питання було повернуто з мертвих, це, мабуть, написання оновленої відповіді.

Якщо графічний інтерфейс взагалі корисний у цьому випадку, пакет Shiny тепер добре інтегрований з RStudio, і було б дуже легко реалізувати це як блискучий додаток. Веб-сайт http://shiny.rstudio.com містить більше інформації, включаючи приклади та документацію.


5

У цьому конкретному випадку це може бути надмірним, але swirlпакет добре підходить для інтерактивного ознайомлення з R початківцями.

swirl - це програмний пакет для мови програмування R, який перетворює консоль R в інтерактивне навчальне середовище. Користувачі отримують негайний зворотний зв'язок, коли їх проводять через самостійні уроки з науки про дані та програмування на R.

Інструкції щодо створення вмісту можна знайти тут: http://swirlstats.com/instructors.html .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.