Это не отвечает на ваш вопрос, но может помочь вам в дальнейшем анализе происходящего. Одна из замечательных особенностей R - то, что вы можете легко проверять исходный код. Особенно в ситуации, когда кажется, что происходят необычные вещи, просмотр кода может быть полезным.
В вашем случае мы можем проверить исходный код fs::dir_copy
и отследить, какой код генерирует сообщение об ошибке. Если вы наберете fs::dir_copy
(без скобок) в консоли, R напечатает R-код функции (если функция не является примитивной). Это покажет вам, что функция fs:dir_copy
вызывает функцию fs::link_copy
. Имеет смысл, поскольку сообщение об ошибке исходит от этой функции. Теперь мы можем распечатать эту функцию с помощью fs::link_copy
. Эта функция генерирует сообщение об ошибке в этой строке:
stopifnot(all(is_link(path)))
Из сообщения об ошибке мы знаем, что all(is_link(path))
возвращает FALSE
. Следующий шаг - взглянуть на функцию fs::is_link
. Здесь мы видим, что ошибка может быть вызвана вызовом функции setNames
, которая зависит от функции fs::file_info
: res <- file_info(path)
Здесь мы видим, что setNames вызывается с условием, зависящим от того, что вернула функция file_info
:
setNames(!is.na(res$type) & res$type == "symlink", res$path)
Это выглядит необычно, поскольку setNames
принимает объект и вектор символов как формальные. Но тогда я не являюсь разработчиком этих функций ;-) Возможно, на вашем компьютере есть проблемы с типом файла, и fs::file_info(path)
возвращает что-то неожиданное при некоторых условиях.