2016-11-23 1 views
1

Packrat은 저장소 (종속성 포함)에서 실제로 사용되는 모든 패키지로 잠금 파일을 생성합니다. 이 자물쇠 파일을 사용하여 프로젝트 웹 사이트에 대한 내 서지 정보를 생성하는 것이 좋을 것이라고 생각했습니다.인용문 생성을 위해 packrat lockfile 사용

잠금 파일의 형식은 다음과 같습니다.

PackratFormat: 1.4 
PackratVersion: 0.4.8.1 
RVersion: 3.3.0 
Repos: CRAN=https://cran.rstudio.com/ 

Package: BH 
Source: CRAN 
Version: 1.62.0-1 
Hash: 14dfb3e8ffe20996118306ff4de1fab2 

Package: DT 
Source: CRAN 
Version: 0.2 
Hash: 36b032203797956fedad5a25055016a9 
Requires: htmltools, htmlwidgets, magrittr 

등 내가 모든 패키지 +는 R과 자료가 많 버전에 대한 인용을 포함하여 BibTex 파일을 끝내고 싶습니다. 다음은 append this bibliography via Rmarkdown입니다.

첫 번째 부분을 수행 할 수 있습니다. Regex 매칭으로 뭔가를 깔끔하게 만들 수는 있지만 파일을 파싱해야한다고 생각했습니다. 내부는 물론 최적이 아니지만 packrat에는 내부 기능이 있습니다.

그러나 인용구를 어떻게 연결했는지 나는 확신 할 수 없습니다. 이전에 누군가가이 질문을 한 것으로 생각할 수도 있습니다. 간단히 문자열로 연결하면 작동하지만 식별자가 부족한 것 같아 마크 다운 파일의 식별자로 언급해야합니다.

+0

발견 [repmis] (http://christophergandrud.github.io/repmis/) 비슷한 것을하지만, 아직 packat과 호환되지 않습니다. – Ruben

답변

1

다음과 같은 내용을 생각해 냈습니다. 나는 아직 행복하지 않다.
하나의 추악한 kludge는 str_replace를 통해 bibtex 식별자로 패키지 이름을 포함시킵니다.
또 다른 nocite 문자열을 생성하고 수동으로 내 .Rmd 파일에 붙여 넣어야하는 문제가 있습니다.
또한 많은 패키지 인용에는 정확한 버전 번호가 포함되어 있지 않지만 특정 버전에 대한 잠금은 packrat에 의해 추가 된 값입니다. 더 많은 정보를 얻기 위해 사람들에게 lockfile을 참조 할 수는 있지만 Bibtex에이 정보를 직접 추가해 볼 수도 있습니다. 그리고 이전에 보지 못했던 패키지의 긴 목록을 살펴본 후에 실제로 호출하는 패키지로 제한하는 옵션이 필요하다고 느낍니다.

library(stringr) 
# use internal function to read lockfile (uses readDcf) 
packages = packrat:::readLockFilePackages("packrat/packrat.lock") 
package_names = names(packages) # get pkg names 


getbib = function(...) { # small helper to extract citations 
    # allow calling it with no argument to get R citation 
    name = list(...) 
    if (length(name) > 0) { 
     name = name[[1]] 
    } else { 
     name = "R" 
    } 
    paste0(
     str_replace(
      as.character(toBibtex(citation(...))), 
      # by default the bibtex entries dont have ids, I'm using the pkg name 
      "\\{\\,", paste0("{", name, ",")) , 
     collapse = "\n") 
} 

bibliography = paste0(c(
    getbib(), sapply(package_names, FUN = getbib)), # get R citation and all packages 
    collapse = "\n\n") 

# write bibliography to file 
cat(bibliography, file = "packrat_bibliography.bibtex") 

# generate YAML reference with nocite 
cat(paste0(" 
bibliography: packrat_bibliography.bibtex 
nocite: | 
", paste0("@", c("R", package_names), collapse = " "))) 
관련 문제