r - रेकॉर्डडाउन html डॉक्युमेंट्स में आउटपुट चंक्स में कोड फोल्डिंग कैसे जोड़ें




r-markdown (2)

मैं वास्तव में RMarkdown में "code_folding" सुविधा की सराहना करता हूं। हालाँकि, जो मुझे वास्तव में चाहिए वह है कोड को हर समय दिखाना और आउटपुट पर डिस्प्ले को टॉगल करना।

---
title: "test file"
author: "dayne"
date: "June 10, 2016"
output: 
  html_document:
    code_folding: hide
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

Here is a basic example.

```{r}
3 + 4
```

क्या कोड के बजाय आउटपुट को टॉगल करने का एक तरीका है? मैंने जो सबसे अच्छा (लेकिन आदर्श नहीं) समाधान सोचा है, वह है चंक्स में collapse=TRUE जोड़ना, लेकिन फिर कोड और आउटपुट अभी भी एक ही समय में प्रदर्शित होते हैं।

संकलित दस्तावेज़ के लिए लिंक: http://rpubs.com/daynefiler/188408


एक सेक्शन को टॉगल करने के लिए एक त्वरित तरीका है (जरूरी कोड नहीं):

अपनी .Rmd फ़ाइल में <div class="toggle"><button>TOGGLE_TEXT</button> और <\div> साथ टॉगल करने के लिए वर्गों को संलग्न करें।

1. How many users are in the second, but not the first, user table?

    <div class="toggle"><button>Solution</button>
    ```{r}
    setdiff(user2, user) %>% nrow()
    ```
    </div>

इसे .Rmd फ़ाइल के नीचे रखें (या आदर्श रूप से .js फ़ाइल में आपके सभी पृष्ठों से जुड़ा हुआ है)।

<script>
  $(".toggle").click(function() {
    $(this).toggleClass("open");
  });
</script>

इसे अपनी .css फ़ाइल में रखें (आपको अपने बटन के लिए ऊंचाई के साथ खेलना होगा)।

.toggle {
  height: 1.55em;
  overflow-y: hidden;
}
.toggle.open {
  height: auto;
}

मैंने सीधे जावास्क्रिप्ट को दूसरे रेकॉर्डड दस्तावेज़ के स्रोत से कॉपी किया, जहां मैंने code_folding: show सेट किया। मैंने javascript को py_code_folding.js रूप में py_code_folding.js और अपने Rmarkdown दस्तावेज़ के शीर्ष पर <script src="py_code_folding.js"></script> जोड़ा। केवल सीमा यह है कि मुझे अपनी जावास्क्रिप्ट में हार्डकोड करना था कि क्या मैं चाहता हूं कि ब्लॉक शुरू में दिखाए जाएं या छिपे हों।

window.initializePythonCodeFolding = function(show) {

  // handlers for show-all and hide all
  $("#rmd-show-all-code").click(function() {
    $('div.r-code-collapse').each(function() {
      $(this).collapse('show');
    });
  });
  $("#rmd-hide-all-code").click(function() {
    $('div.r-code-collapse').each(function() {
      $(this).collapse('hide');
    });
  });

  // index for unique code element ids
  var currentIndex = 10000;

  // select all R code blocks
  var rCodeBlocks = $('pre.python');
  rCodeBlocks.each(function() {

    // create a collapsable div to wrap the code in
    var div = $('<div class="collapse r-code-collapse"></div>');
    if (show)
      div.addClass('in');
    var id = 'rcode-643E0F36' + currentIndex++;
    div.attr('id', id);
    $(this).before(div);
    $(this).detach().appendTo(div);

    // add a show code button right above
    var showCodeText = $('<span>' + (show ? 'Hide' : 'Code') + '</span>');
    var showCodeButton = $('<button type="button" class="btn btn-default btn-xs code-folding-btn pull-right"></button>');
    showCodeButton.append(showCodeText);
    showCodeButton
        .attr('data-toggle', 'collapse')
        .attr('data-target', '#' + id)
        .attr('aria-expanded', show)
        .attr('aria-controls', id);

    var buttonRow = $('<div class="row"></div>');
    var buttonCol = $('<div class="col-md-12"></div>');

    buttonCol.append(showCodeButton);
    buttonRow.append(buttonCol);

    div.before(buttonRow);

    // update state of button on show/hide
    div.on('hidden.bs.collapse', function () {
      showCodeText.text('Code');
    });
    div.on('show.bs.collapse', function () {
      showCodeText.text('Hide');
    });
  });

}

$(document).ready(function () {
  window.initializePythonCodeFolding("show" === "show");
});