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

84

Я создал код 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

И с этими четырьмя вновь определенными переменными (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. Что здесь делает R?
Seanosapien
1
@Seanosapien Параметр strsplit необходим для удаления запятых из ввода, если пользователь вводит "4,3,2,1", как в исходном примере. В этом нет необходимости, если ввод не в этом формате.
Лорен Фитч
62

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

Вот пример:

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

1: Yes
2: No

Selection:
patr1ckm
источник
7

Поскольку этот вопрос воскрес из мертвых, он, вероятно, пишет обновленный ответ.

Если в этом случае графический интерфейс хоть сколько-нибудь полезен, пакет Shiny теперь хорошо интегрирован с RStudio, и было бы очень легко реализовать его как приложение Shiny. На веб-сайте http://shiny.rstudio.com есть дополнительная информация, включая примеры и документацию.

Shadowtalker
источник
5

В данном конкретном случае это может быть излишним, но swirlпакет хорош для интерактивного ознакомления с R новичками.

swirl - это программный пакет для языка программирования R, который превращает консоль R в интерактивную среду обучения. Пользователи получают немедленную обратную связь, поскольку они проходят самостоятельные уроки по науке о данных и программированию на языке R.

Инструкции по созданию контента можно найти здесь: http://swirlstats.com/instructors.html .

dnlbrky
источник