исправление неожиданных фигурных скобок в R

#r

#r

Вопрос:

Я написал следующий код:

 extract_distract <- function(dataset, type="increase"){
  if(dataset = wfh){
    if(type = "decrease"){
      decr_distract <- str_subset(decr_product, "distract")
      str_extract(decr_distract, ".{0,30}distract .{0,30}")
    } else if(type = "increase"){
      incr_distract <- str_subset(incr_product, "distract")
      str_extract(incr_distract, ".{0,30}distract .{0,30}")
      } else{stop("NA - use either increase or decrease type")}
    } else{stop("NA - use (dataset = wfh)")}}
 

Каждый раз, когда я пытаюсь запустить его, он выдает следующую ошибку:

 >       } else{stop("NA - use either increase or decrease type")}
Error: unexpected '}' in "      }"
>     } else{stop("NA - use (dataset = wfh)")}}
Error: unexpected '}' in "    }"
 

Я новичок в этом, но был бы признателен за любую помощь

Комментарии:

1. Очень странно, что эта проблема вызвала эту ошибку, но я считаю, что проблема в том, что if(dataset = wfh) так и должно быть if(dataset == wfh) .

2. Здесь есть несколько проблем. Наиболее важным является то, что вы используете = для проверки равенства, что приведет к ошибке. Вы должны использовать == . Кроме того, не получите ни одного логического результата, проверив равенство фреймов данных — вы получите векторизованный результат. Попробуйте if(identical(dataset, wfh)) . Кроме того, функция не должна полагаться на наличие или имя переменных в глобальной среде. Вы должны передать incr_product функции и в desc_product качестве аргументов.

3. @GregorThomas Спасибо, изменил его на ‘dataset ==’ и ‘type ==’, тогда это сработало — ошибка новичка 🙂

4. И я бы добавил wfh в список Аллана переменные, используемые в функции, которые также должны быть переданы… если вы не пытаетесь проверить имя переданного набора данных, в этом случае deparse(substitute(dataset)) == "wfh" это может быть то, что вы ищете…

Ответ №1:

Обычно рекомендуется уделять больше внимания первой ошибке, а не последней. Если я запускаю ваш код, я вижу

 > extract_distract <- function(dataset, type="increase"){
    if(dataset = wfh){
Error: unexpected '=' in:
"extract_distract <- function(dataset, type="increase"){
  if(dataset ="
>     if(type = "decrease"){
Error: unexpected '=' in "    if(type ="
>       decr_distract <- str_subset(decr_product, "distract")
Error in str_subset(decr_product, "distract") : 
  could not find function "str_subset"
>       str_extract(decr_distract, ".{0,30}distract .{0,30}")
Error in str_extract(decr_distract, ".{0,30}distract .{0,30}") : 
  could not find function "str_extract"
>     } else if(type = "increase"){
Error: unexpected '}' in "    }"
>       incr_distract <- str_subset(incr_product, "distract")
Error in str_subset(incr_product, "distract") : 
  could not find function "str_subset"
>       str_extract(incr_distract, ".{0,30}distract .{0,30}")
Error in str_extract(incr_distract, ".{0,30}distract .{0,30}") : 
  could not find function "str_extract"
>       } else{stop("NA - use either increase or decrease type")}
Error: unexpected '}' in "      }"
>     } else{stop("NA - use (dataset = wfh)")}}
Error: unexpected '}' in "    }"
 

Первая ошибка Error: unexpected '=' in: ... , которая привела бы вас к решению, упомянутому @GregorThomas: вы должны были использовать == , а не = . Причина, по которой это вызвало все остальные ошибки, заключается в том, что R отбрасывает неправильные строки. После их удаления остальная часть вашего кода не имеет смысла.