Как вы читаете один символ из консоли в R (без возврата)? - PullRequest
3 голосов
/ 02 апреля 2012

Только что начал использовать R. Как и на любом языке, я хочу, чтобы программа работала в интерактивном режиме и быстро.

Я обычно пишу что-то вроде (псевдокод)

get_char(char)
if (char == 'q') {return}
if (char == 'a') {list.append(blah)}
if (char is anything else) {just move along}

q для выхода и a для добавления, и оба они находятся прямо под моей левой рукой на клавиатуре, так что это как можно быстрее.

Я вижу в R, я могу использовать

char=readline("Type a character and hit Enter")

но, конечно, я должен нажать Enter. Есть ли способ получить персонажа в R?

Ответы [ 2 ]

6 голосов
/ 02 апреля 2012

Не прямой ответ на ваш вопрос, но вы можете использовать debug, чтобы получить желаемое поведение. Если у вас есть функция, которую вы хотите протестировать, вызов debug(myfunction) устанавливает отладчик R, чтобы при следующем вызове myfunction() она выполнялась по одной строке за раз. Если вы нажмете Enter внутри отладчика, он перейдет к следующей строке функции. Если вы хотите проверить какие-либо данные в области действия функции или запустить любой другой произвольный код R, вы можете сделать это тоже, поскольку отладчик обеспечивает доступ ко всем обычным функциям R.

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

0 голосов
/ 21 июня 2012

Один из способов сделать это показан в функции sudoku::playSudoku.В Windows функция getGraphicsEvent обеспечивает обратный вызов для ввода с клавиатуры;на других устройствах вы можете использовать виджет Tk.

Однако графическое устройство должно быть открыто.

Вот пример для окон:

dev.new()
getGraphicsEvent(
    "", 
    onKeyb=function(x) 
      if(tolower(x)=="q") 
        return(1) 
      else 
        cat("you pressed a key.\n")
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...