Ошибка в mutate_at при попытке создать новые переменные с помощью функции tidyselect при вязании R markdown - PullRequest
0 голосов
/ 07 мая 2020

Весьма вероятно, что мне не хватает чего-то действительно простого, но я не могу понять, почему эта ошибка сохраняется в моей функции 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...