Неожиданный символ в функции (язык R) - PullRequest
0 голосов
/ 23 июня 2018

Я пробую следующий фрагмент кода из книги «Искусство программирования на R» и по какой-то причине получаю сообщение об ошибке «Ошибка: неожиданный символ в» first1 <- function (x) {for (iв 1: length (x)) {if (x [i] == 1) break} return "Этот код точно такой, как показано в книге (за исключением того, что я не могу разбить каждую строку на отдельной строке). </p>

Эта функция работает нормально, когда я удаляю return (i).

first1 <- function(x) {for (i in 1:length(x)) {if (x[i] == 1) break} return(i) }

Ответы [ 2 ]

0 голосов
/ 23 июня 2018

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

first1 <- function(x) {for (i in 1:length(x)) {if (x[i] == 1) break}
+  # that was displayed by the R interpreter/parser

После этого вы сможете выполнить команду:

return(i) }

И когда вы нажмете <enter>, в глобальном глобусе появится функция с именем first1.среда.Обычный способ взаимодействия с R - это сначала собрать свой код в редакторе.GUI и IDE для R обычно предоставляют такую ​​емкость.Rstudio является особенно популярным, но есть несколько других доступных.

Вот что появляется на моей консоли при вводе многострочной функции.

> f_e<-function(){
+     b=2
+     c=2
+     d=eval( (expr_list()$f_a))
+     print(d)
+ }

Но если я скопирую и вставлю это точно в интерпретатор, я получу ошибку, потому что ни одна из них "> "и" + "на самом деле являются частью кода.Это просто сообщения пользователю.Мне нужно было бы вставить:

f_e<-function(){
     b=2
     c=2
     d=eval( (expr_list()$f_a))
     print(d)
 }

(я думаю, что R-GUI в версии R для Windows может принять текст с ">" и "+" и убрать их для удобства, но моя система этого не делает.)

0 голосов
/ 23 июня 2018

Точка с запятой необходима для разделения отдельных команд, в случае цикла for и команд возврата:

first1 <- function(x) {for (i in 1:length(x)) {if (x[i] == 1) break}; return(i) }

а лучше использовать структурированную форму кода:

first1 <- function(x) {
  for (i in 1:length(x)) {
    if (x[i] == 1) break
  } 
  return(i) 
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...