"Местоположение отладки является приблизительным, поскольку исходный код недоступен" в R 4.0.0 + RStudio
Я обновился до R 4.0.0
и версия RStudio 1.2.5042
.
Я разрабатываю пакет и регулярно использую следующий рабочий процесс:
- Соберите пакет из RStudio, нажав кнопку "Установить и перезапустить" (включая кнопку
--with-keep.source
R CMD INSTALL вариант). - Установите точку останова в
.R
файл функции, которую я хочу отлаживать. - Вызовите функцию и подождите, пока отладчик остановится именно там, где я установил точку останова.
Раньше это прекрасно работало. Однако теперь я всегда получаю:
Местоположение отладки является приблизительным, поскольку источник недоступен
Это раздражает, потому что я все еще могу отлаживать, но я больше не в реальной функции.
Любые подсказки / идеи, почему это так?
Изменить (11.05.2020)
Похоже, это проблема с RStudio и R 4.0.0. Вот почему я так думаю. Я использовал другую машину под управлением Windows 10 и выполнил следующие шаги (в этом порядке; должно быть воспроизводимо для пользователей Windows). Вначале у меня были установлены R 3.6.1 и RStudio 1.2.5042 (на момент написания 1.2.5042 была текущей версией; пробовал также с предварительной версией 1.3.957 RStudio).
Клонируйте разрабатываемый мной пакет из Github:
git clone "https://github.com/M-E-Rademaker/cSEM"
Зайдите в корень пакета и откройте
cSEM.Rproj
- Бегать
devtools::install_github("M-E-Rademaker/cSEM")
для автоматической установки пакета и загрузки всех пакетов, которыеcSEM
зависит от. - В RStudio: нажмите "
Build
"установить и"Install and Restart
" - Теперь навиагте на исходный файл. Например:
R/00_csem.R
и установите точку останова, например, в строке 321. Теперь запустите следующий фрагмент кода:
model <- " # Structural model eta2 ~ eta1 eta3 ~ eta1 + eta2 # Measurement eta1 =~ y11 + y12 + y13 eta2 =~ y21 + y22 + y23 eta3 =~ y31 + y32 + y33 " res <- csem(threecommonfactors, model)
Отладчик должен запуститься и перейти прямо к строке 321. У вас должна быть возможность изменять код, и вы НЕ должны получать предупреждение "местоположение-отладки-приблизительное-потому-что-источник-не-доступен"ЕСЛИ вы в версии R ниже 4.0.0.
- Перейти к
R/00_csem.R
и удалите точку останова в строке 321 - Закройте Rstudio и обновите R до 4.0.0 (например, используя
installr::updateR()
) - ВАЖНО: также загрузите новейшую версию Rtools и следуйте инструкциям на веб-сайте, касающимся части, где вам нужно добавить rtools в PATH. https://cran.r-project.org/bin/windows/Rtools/
- Поскольку вам нужно переустановить все пакеты: откройте
cSEM.Rproj
еще раз; бегатьinstall.packages("devtools")
- Теперь повторите шаги 3, 4, 5 и 6.
- Отладчик должен остановиться на линии 321 раз, однако, на этот раз, когда вы сделать получить "отладку-расположение-это приближённый потому--источник-это-не-Availabe" предупреждение.
Почему это? Любые идеи / подсказки / предложения приветствуются!!
Еще я пробовал:
- Удаление пакета из win-библиотеки и переустановка
- Переустановка пакета с GitHub с помощью
devtools::install_github()
- Проверено корень пакета
- Обновлены все пакеты зависимостей
- Повторял процедуру на разных машинах
- Я разрабатываю еще один пакет, который вы можете клонировать с GitHub здесь: https://github.com/M-E-Rademaker/cSEM.DGP. Вы можете выполнить ту же процедуру с этим пакетом, однако здесь я не получаю предупреждения при использовании 4.0.0... что, на мой взгляд, очень странно.
1 ответ
Я исследовал это с помощью вашего пакета и обнаружил, что то, что вы видите здесь, - это ошибка, довольно глубокая в интерфейсе RStudio / R, вызванная некоторыми тонкими изменениями R, внесенными в R 4.0 вокруг ссылок на источники.
Проблема возникает всякий раз, когда есть обратная косая черта (\
) в коде функции. Когда это происходит, R ускользает от него, что заставляет RStudio думать, что копия функции, на которую вы смотрите, отличается от той, что находится в файле, что, в свою очередь, заставляет его показывать вам копию в обозревателе кода вместо открытие самого файла.
Поскольку ваш csem()
функция содержит обратную косую черту, это вызывает проблему. Я написал об этом в нашем трекере проблем здесь: