#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 отбрасывает неправильные строки. После их удаления остальная часть вашего кода не имеет смысла.