Как создать удаленный файл, размещенный на gitlab в R?

# #r #gitlab

Вопрос:

У меня есть внутренний репозиторий в Gitlab.

В моем сценарии R я хочу получить source .R файл из этого внутреннего репозитория.

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

source("public-path-to-file")

Но когда я пытаюсь сделать это с помощью личного файла, я получаю:

 Error in source("") : 
  :1:1: unexpected '<'
1: <
    ^
 

Комментарии:

1. Попробуйте readLines() (используется внутри source ), чтобы, по крайней мере, получить полное сообщение об ошибке.

2. Что касается фактической аутентификации (в противном случае вы не получите доступ к частному хранилищу), вы можете ознакомиться с пакетом учетных данных. Я не использовал его для поиска одного файла, но он хорошо работает с git2r и удаленными устройствами.

3. Ваша ошибка unexpected '<' заключается в том, что gitlab вернет HTML-файл по заданному URL-адресу, начиная с <!DOCTYPE html> . Вам действительно нужен пакет учетных данных

4. Работает ли пакет учетных данных также для gitlab? @danlooo

Ответ №1:

Я нашел хитрый способ сделать это, который, по крайней мере, помогает делу:

Сначала вам нужно создать приватный токен с доступом к api. Затем вы можете напрямую вызвать API gitlab, чтобы ПОЛУЧИТЬ файл

Код:

 cmd <- "curl -s --header 'PRIVATE-TOKEN: <your private token for gitlab with api access>' '<full gitlab link of the raw file that you want to source>'" # you directly access the API with your private token

output <- system(cmd, intern=TRUE) # capturing the output of the system call

writeLines(output, "functions.R") # creating a temporary file which contains the output of the API call

source("functions.R") # Sourcing the file the usual way

file.remove("functions.R") # removing the temporary file for housekeeping
 

Объяснение:

Мы вызываем API напрямую с запросом GET, используя системную команду curl.

Затем вы вызываете системную команду через R, фиксируя результат.

А затем вы можете создать временный файл с соответствующим содержимым и создать его, как обычно. Надеюсь, это может кому-то помочь