Весьма вероятно, что мне не хватает чего-то действительно простого, но я не могу понять, почему эта ошибка сохраняется в моей функции mutate_at.
library(tidyverse)
test = data.frame(diff_1 = sample(0:10, size=20, replace=TRUE),
diff_2 = sample(0:10, size=20, replace=TRUE),
diff_3 = sample(0:10, size=20, replace=TRUE))
test2 = test %>% mutate_at(.vars = vars(contains("diff_")), .funs = list(cat = ~as.factor(ntile(., 5)))) # create quintiles of variables
Я пытаюсь создать новые столбцы с суффиксами (" _cat ") добавляется в конце имен переменных с помощью mutate_at, но при попытке выбрать переменные, содержащие" diff_ ", возникает следующая ошибка, из-за чего я не могу понять, почему ...: '(
Error: `.vars` must be a character/numeric vector or a `vars()` object, not a `data.frame` object
РЕДАКТИРОВАТЬ:
Когда я запускаю R markdown в разделах, тестовый код работает после перезапуска R. Но сообщение об ошибке сохраняется всякий раз, когда я пытаюсь связать всю книгу уценки. Это означает что я не могу просто перезапустить RStudio, чтобы исправить эту ошибку.
Quitting from lines 1008-1040 (analysis-complete-case-FIoriginal.Rmd)
Error: `.vars` must be a character/numeric vector or a `vars()` object, not a `data.frame` object
Я загрузил самые последние версии R и RStudio, но все равно не повезло :(. Интересно, может ли кто-нибудь пролить свет на то, почему это сообщение об ошибке может возникать? Это проблема с функцией tidyselect?
Спасибо!
EDIT2:
Для справки, полный код для этого Пример:
transposed_cont = mydata_cont %>%
pivot_longer(cols=all_of(myvarscont), names_to = "myvars", values_to = "value") %>%
pivot_wider(names_from = source, values_from = value) %>%
mutate(diff_w2w1 = wave2-wave1,
diff_w3w1 = wave3-wave1) %>%
pivot_wider(., id_cols=id, names_from=myvars, values_from=c("wave1", "wave2", "wave3", "diff_w2w1", "diff_w3w1")) %>% # allows you to spread multiple values
dplyr::select(id, wave1_fi.score, wave2_fi.score, wave1_fp.count, wave2_fp.count, starts_with("diff")) %>%
mutate_at(.vars = vars(contains("diff_"), .funs = list(cat = ~as.factor(ntile(., 5)))) ## THIS IS WHERE THE CODE FAILS
Проблема, кажется, в последней строке моего кода vars(contains("diff_")
, когда я вяжу Rmarkdown. В настоящее время у меня есть очень грубый обходной путь, в котором я перечисляю переменные как таковые:
tempvars = c(Cs(diff_w2w1_chronic_count, diff_w2w1_cvd_count, diff_w2w1_overnight_num, diff_w2w1_falls_count, diff_w2w1_mmse_errors,
diff_w2w1_MHcesd, diff_w2w1_COGimmediaterecall1, diff_w2w1_COGimmediaterecall2, diff_w2w1_COGdelayedrecall, diff_w2w1_bmi,
diff_w3w1_chronic_count, diff_w3w1_cvd_count, diff_w3w1_overnight_num, diff_w3w1_falls_count, diff_w3w1_FRtscore,
diff_w3w1_mmse_errors, diff_w3w1_moca_errors, diff_w3w1_MHcesd, diff_w3w1_COGimmediaterecall1, diff_w3w1_COGimmediaterecall2,
diff_w3w1_COGdelayedrecall, diff_w3w1_COGtrail1time, diff_w3w1_COGtrail2time, diff_w3w1_COGtraildeltatime, diff_w3w1_CRTmeancog,
diff_w3w1_CRTmeanmot, diff_w3w1_CRTmeantot, diff_w3w1_visualAcuityLeft, diff_w3w1_visualAcuityRight, diff_w3w1_bmi, diff_w3w1_FRwhr))
transposed_cont = mydata_cont %>%
pivot_longer(cols=all_of(myvarscont), names_to = "myvars", values_to = "value") %>%
pivot_wider(names_from = source, values_from = value) %>%
mutate(diff_w2w1 = wave2-wave1,
diff_w3w1 = wave3-wave1) %>%
pivot_wider(., id_cols=id, names_from=myvars, values_from=c("wave1", "wave2", "wave3", "diff_w2w1", "diff_w3w1")) %>% # allows you to spread multiple values
dplyr::select(id, wave1_fi.score, wave2_fi.score, wave1_fp.count, wave2_fp.count, starts_with("diff")) %>%
mutate_at(.vars = tempvars, .funs = list(cat = ~as.factor(ntile(., 5)))) # create quintiles of variables
Я смог связать вывод с помощью этого грубого обходного пути, но было бы очень удобно узнать, почему мои первая попытка не удалась для использования в будущем.