Можно ли установить pandoc в Windows с помощью команды R?

Я хотел бы загрузить и установить pandoc на компьютере с Windows 7, выполнив команду в R. Возможно ли это?

(Я знаю, что могу сделать это вручную, но когда я покажу это студентам - чем больше шагов я могу организовать в фрагменте кода R, тем лучше)


person Tal Galili    schedule 25.02.2013    source источник


Ответы (1)


Как насчет того, чтобы просто загрузить самую последнюю версию установщика и запустить ее с R:

  1. а) Определите самую последнюю версию Pandoc и получите URL-адрес с помощью пакета XML:

    library(XML)
    page     <- readLines('http://code.google.com/p/pandoc/downloads/list', warn = FALSE)
    pagetree <- htmlTreeParse(page, error=function(...){}, useInternalNodes = TRUE, encoding='UTF-8')
    url      <- xpathSApply(pagetree, '//tr[2]//td[1]//a ', xmlAttrs)[1]
    url      <- paste('http', url, sep = ':')
    

    б) Или вместо этого примените магию регулярных выражений благодаря @G.Grothendieck (в этом случае пакет XML не нужен):

    page <- readLines('http://code.google.com/p/pandoc/downloads/list', warn = FALSE)
    pat  <- "//pandoc.googlecode.com/files/pandoc-[0-9.]+-setup.exe"
    line <- grep(pat, page, value = TRUE); m <- regexpr(pat, line)
    url  <- paste('http', regmatches(line, m), sep = ':')
    

    в) Или просто проверьте самую последнюю версию вручную, если хотите:

    url <- 'http://pandoc.googlecode.com/files/pandoc-1.10.1-setup.exe'
    
  2. Загрузите файл как binary:

    t <- tempfile(fileext = '.exe')
    download.file(url, t, mode = 'wb')
    
  3. И просто запустите его из R:

    system(t)
    
  4. Удалите ненужный файл после установки:

    unlink(t)
    

PS: извините, тестировалось только на Windows XP

person daroczig    schedule 25.02.2013
comment
Большой! Есть ли способ автоматически распознать последнюю версию? - person Tal Galili; 25.02.2013
comment
@TalGalili: конечно, я добавил, надеюсь, работающий способ распознавания последней версии. - person daroczig; 25.02.2013
comment
А, и извините за частые правки, я больше не буду трогать этот пост. Обещаю :) - person daroczig; 25.02.2013
comment
Чтобы избавиться от XML, но по-прежнему извлекать точное имя файла, попробуйте следующее: pat <- "//pandoc.googlecode.com/files/pandoc-[0-9.]+-setup.exe"; target.line <- grep(pat, page, value = TRUE); m <- regexpr(pat, target.line); regmatches(target.line, m) (перед http все еще нужно добавить http). - person G. Grothendieck; 25.02.2013
comment
Отличное решение, ребята! Спасибо, daroczig - интересно узнавать что-то новое. Кроме того, спасибо Grothendieck за дополнительное решение - person Tal Galili; 25.02.2013
comment
Спасибо @ G.Grothendieck, я обновил ответ на основе вашего действительно классного волшебства регулярных выражений. - person daroczig; 25.02.2013
comment
Я думаю, что target.line<- упал - person G. Grothendieck; 25.02.2013
comment
@ G.Grothendieck: верно, спасибо (и извините), я только что исправил это. - person daroczig; 25.02.2013
comment
Привет, Дароциг и Гротендик. Основываясь на этом потоке, я решил создать пакет R с функциями типа install.x. Я опубликовал его здесь: github.com/talgalili/installr. Буду признателен за любые комментарии (включая если вы хотите где-то получить признание, которое, по вашему мнению, вы заслуживаете. Я уже дал некоторые функции в некоторых функциях. Но я мог что-то упустить). Еще раз большое спасибо. Таль - person Tal Galili; 05.03.2013