"Местоположение отладки является приблизительным, поскольку исходный код недоступен" в R 4.0.0 + RStudio

Я обновился до R 4.0.0 и версия RStudio 1.2.5042.

Я разрабатываю пакет и регулярно использую следующий рабочий процесс:

  1. Соберите пакет из RStudio, нажав кнопку "Установить и перезапустить" (включая кнопку --with-keep.source R CMD INSTALL вариант).
  2. Установите точку останова в .R файл функции, которую я хочу отлаживать.
  3. Вызовите функцию и подождите, пока отладчик остановится именно там, где я установил точку останова.

Раньше это прекрасно работало. Однако теперь я всегда получаю:

Местоположение отладки является приблизительным, поскольку источник недоступен

Это раздражает, потому что я все еще могу отлаживать, но я больше не в реальной функции.

Любые подсказки / идеи, почему это так?

Изменить (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).

  1. Клонируйте разрабатываемый мной пакет из Github:

    git clone "https://github.com/M-E-Rademaker/cSEM"
    
  2. Зайдите в корень пакета и откройте cSEM.Rproj

  3. Бегать devtools::install_github("M-E-Rademaker/cSEM") для автоматической установки пакета и загрузки всех пакетов, которые cSEM зависит от.
  4. В RStudio: нажмите "Build"установить и"Install and Restart"
  5. Теперь навиагте на исходный файл. Например:R/00_csem.R и установите точку останова, например, в строке 321.
  6. Теперь запустите следующий фрагмент кода:

    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.

  7. Перейти к R/00_csem.R и удалите точку останова в строке 321
  8. Закройте Rstudio и обновите R до 4.0.0 (например, используя installr::updateR())
  9. ВАЖНО: также загрузите новейшую версию Rtools и следуйте инструкциям на веб-сайте, касающимся части, где вам нужно добавить rtools в PATH. https://cran.r-project.org/bin/windows/Rtools/
  10. Поскольку вам нужно переустановить все пакеты: откройте cSEM.Rprojеще раз; бегатьinstall.packages("devtools")
  11. Теперь повторите шаги 3, 4, 5 и 6.
  12. Отладчик должен остановиться на линии 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()функция содержит обратную косую черту, это вызывает проблему. Я написал об этом в нашем трекере проблем здесь:

https://github.com/rstudio/rstudio/issues/6854

Другие вопросы по тегам