2015-03-10 18 views
7

Tôi hiện đang chuyển đổi một bài viết JSS, sử dụng knitr, thành một họa tiết gói R . Tuy nhiên, tôi đang nghi ngờ về vị trí làm mờ nét ảnh, cấu trúc và cách tôi xử lý thời gian tính toán rất dài mà nó yêu cầu đó là ~ 2 ngày trên một máy tính xách tay thông thường.Vignettes R nặng tính toán

official documentation cung cấp ít hoặc không có thông tin về việc này. Một lưu ý ngắn trong câu trả lời trong số mailing list là thông tin duy nhất tôi tìm thấy khi tìm kiếm. Brian Ripley viết ở đây:

Đặc biệt, cran không chấp nhận gói với họa tiết Sweave rằng mất quá nhiều thời gian để kiểm tra - một diễn ca 8 giờ [...]. Chúng tôi chỉ yêu cầu chúng tôi được thông báo như vậy.

Hadley Wickham's description của họa tiết nói để đặt eval = FALSE làm tùy chọn đoạn. Tuy nhiên, đây không phải là một cách tiếp cận khả thi trong trường hợp của tôi khi dữ liệu được tạo ra từ các tính toán là cần thiết.

This presentation gợi ý rằng /inst/doc sẽ được sử dụng cho các họa tiết được biên dịch trước và nặng. Tuy nhiên, điều đó không đồng ý với các hướng dẫn mới về cách sử dụng /vignettes cho các họa tiết gói (hoặc cái gì?).

Hiện tại, tôi đã đặt các tệp nguồn của mình trong /vignettes và tôi tạo tệp .RData chứa các đối tượng có tính toán đắt nhất (và cũng khá lớn). Các tập lệnh sau đó kiểm tra xem các đối tượng có sẵn thông qua tệp .RData đó hay không, nếu không, các đối tượng sẽ được tạo. Vì vậy, biên dịch và chạy hoàn toàn từ đầu, tệp .RData chỉ đơn giản có thể bị xóa.

Có ai có một số kinh nghiệm hoặc gợi ý về vấn đề này không? Nếu họa tiết phải ở trong /vignettes hoặc /inst/doc? Nếu trước đây được ưu tiên, tôi đặt các tệp cần thiết như .bib, .RData, v.v ... ở đâu? Tôi phải thừa nhận rằng tôi thấy số /vignettes/inst/doc hơi khó hiểu.

+1

Thật không may, đây thực sự là câu hỏi về chính sách CRAN, không phải là câu hỏi lập trình. Câu trả lời hay nhất sẽ đến từ một email đến CRAN. Bạn cũng có thể thử r-devel, nhưng tôi nghi ngờ họ sẽ nói với bạn chỉ cần hỏi CRAN, quá. – Thomas

+0

@Thomas Vâng, tôi thấy điều đó ngay bây giờ. Tôi đoán đây cũng là một nỗ lực để tránh làm phiền các nhà bảo trì CRAN (mà tôi chắc chắn đã có quá ít thời gian) và để nghe và làm thế nào những người khác đã xử lý các vấn đề tương tự. Nếu nó không phù hợp, tôi sẽ để lại câu hỏi ở đây và gửi email cho những người bảo trì sau này nếu không có gì xảy ra. –

+1

Làm cho tinh thần. Nếu bạn nhận được câu trả lời từ CRAN, tôi khuyến khích bạn đăng câu trả lời ở đây để những người khác có thể tìm thấy câu trả lời đó. Họ là những người bận rộn, nhưng nó cũng là công việc của họ (chủ yếu là tự bổ nhiệm) để duy trì hệ thống, vì vậy nếu các tập tin trợ giúp của họ không rõ ràng, đó là trách nhiệm của họ để làm rõ mọi thứ. – Thomas

Trả lời

1

Tôi trình bày giải pháp sau đây cho họa tiết dựa trên hàng dệt kim. Tôi sẽ giả sử bạn đang sử dụng devtools để bảo trì gói. Để ngăn chặn R từ chạy mã họa tiết trong kiểm tra gói (tức là R CMD check.) Sẽ cho phép bạn bao gồm họa tiết tính toán nặng, các họa tiết phải:

  1. sử dụng một động cơ họa tiết mà không bị rối mã R. Nói cách khác, động cơ không được sản xuất các tệp .R trong inst/doc khi bạn thực thi devtools::build_vignettes(). Gói knitr cung cấp các công cụ không mã R mã, bao gồm knitr::rmarkdown_notangle có thể được sử dụng để thay thế cho knitr::rmarkdown.
  2. Bao gồm mã vô hiệu hóa đánh giá chunk động khi phát hiện thấy nó đang được thực hiện trong một cuộc gọi đến R CMD check. Điều này có thể đạt được bằng cách đặt mã ở phía trên cùng của họa tiết kiểm tra các cài đặt khác nhau và thiết lập cài đặt đoạn bằng cách sử dụng knitr::opts_chunk$set(eval = ...) khi thích hợp. Mã được hiển thị bên dưới được mượn từ gói knitr, rất nhiều nhờ Yihui Xie để tìm hiểu cách thực hiện điều này.

Dưới đây là ví dụ về tệp làm mờ nét ảnh sử dụng hai chiến lược này để có thể xây dựng bằng cách sử dụng devtools::build_vignettes() và sẽ không được thực thi mã trong R CMD check. Lưu ý rằng mã vẫn được thực hiện trong khi xây dựng gói (ví dụ: được thực hiện trong devtools::build()devtools::check()).

--- 
title: "example vignette" 
output: 
    rmarkdown::html_document: 
    self_contained: yes 
fontsize: 11pt 
documentclass: article 
vignette: > 
    %\VignetteIndexEntry{example vignette} 
    %\VignetteEngine{knitr::rmarkdown_notangle} 
--- 

```{r, include = FALSE} 
is_check <- ("CheckExEnv" %in% search()) || any(c("_R_CHECK_TIMINGS_", 
      "_R_CHECK_LICENSE_") %in% names(Sys.getenv())) 
knitr::opts_chunk$set(eval = !is_check) 
``` 

```{r} 
Sys.sleep(100) 
``` 

Ví dụ về phương pháp này trong tự nhiên, see this vignette for a developmental package on GitHub.

+0

Cảm ơn bạn đã trả lời, tôi chỉ sử dụng 'rmarkdown_notangle' cho một trong các gói của tôi, và nó hoạt động cho các cửa sổ nhưng doesn ' t làm việc cho Linux cũng không mac. Tôi đã gặp sự cố tương tự như sau: . Và tôi sử dụng phiên bản mới nhất của 'knitr' là 1.17 trên CRAN. Bạn còn ý kiến ​​nào không? – Consistency

+0

Không có ý tưởng xin lỗi, 'rmarkdwon_notangle' trong knitr 1.17 hoạt động cho tôi trên Ubuntu 16.04. Điều duy nhất tôi có thể nghĩ đến là cố gắng phiên bản dev của knitr trên Github? – paleo13

Các vấn đề liên quan