Проблема при создании zip-файла из каталога - PullRequest
0 голосов
/ 24 августа 2018

У меня проблемы с созданием zip-файла из R. Тот же код отлично работал при работе с R версией 3.4.2, 32-битный компьютер.

Теперь я пытаюсь запустить то же самое на 64-разрядном компьютере R версии 3.5.1, и команда zip (), похоже, не работает. Что происходит?

zip(zipfile = "test.zip",files=list.files(getwd())) 
#create zip from whole directory, on 1st machine it works, now nothing happens

Я проверил исходный код zip (), и когда я его отладил, я обнаружил, что команда system2 ничего не делает.

  zip <- function (zipfile, files, flags = "-r9X", extras = "", zip = Sys.getenv("R_ZIPCMD", 
                                                                                  "zip")) 
  {
    if (missing(flags) && (!is.character(files) || !length(files))) 
      stop("'files' must a character vector specifying one or more filepaths")
    args <- c(flags, shQuote(path.expand(zipfile)), shQuote(files), 
              extras)
    if (.Platform$OS.type == "windows") 
      invisible(system2(zip, args))
    else invisible(system2(zip, args))
  }

# I run this manually when trying to debug, nothing happens;
system2(zip, args) ## zip is a parameter here, not a function
####
Browse[2]> zip
[1] "zip"
Browse[2]> args
[1] "-r9X"                    "\"bla.zip\""            
[3] "\"[Content_Types].xml\"" "\"_rels\""              
[5] "\"docProps\""            "\"xl\""                 
[7] "" 

Например, абсурдный вызов не выдает ошибку.

system2("blablađ",2) ## does nothing but no error or warning either

Я застрял, пытаясь понять, как работает функция system2 () и что мне нужно изменить, чтобы создать сжатую папку.

Спасибо

РЕДАКТИРОВАТЬ: После получения справки из комментария, я получил следующую ошибку:

Browse[2]> system2(zip, args,stderr = T)
Error in system2(zip, args, stderr = T) : '"zip"' not found

решено: после установки Rtools для версии 3.5 все заработало.

1 Ответ

0 голосов
/ 25 августа 2018

Из справки zip:

zip (zipfile, files, flags = "-r9X", extras = "", zip = Sys.getenv ("R_ZIPCMD", "zip"))

zip Строка символов, определяющая внешнюю команду, которая будет использоваться.

Как видите, функция zip имеет аргумент zip для указания внешней команды, которая будет использоваться. На моей машине это:

λ where zip
C:\Oracle\Ora11\BIN\zip.exe
C:\Program Files\Rtools\bin\zip.exe

Программа zip доступна в Rtools, но обычно она также доступна на любом (Windows?) Компьютере.

Чтобы проверить, найден ли zip в R, введите:

> Sys.which("zip")
                              zip 
"C:\\Oracle\\Ora11\\bin\\zip.exe" 

Если вы получите "", это означает, что zip не находится в пути, и если его нет ни в переменной окружения R_ZIPCMD, вы должны указать его путь в аргументе zip.

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