প্রোগ্রামিতভাবে নিটআর দিয়ে আর-এ মার্কডাউন টেবিল তৈরি করা


103

আমি কেবল নিটআর এবং আর ডকুমেন্টস এবং প্রতিবেদন তৈরিতে মার্কডাউন ব্যবহার সম্পর্কে শিখতে শুরু করছি। এটি আমার কাজের সাথে আমার কি করতে হবে তা প্রতিবেদন করার জন্য দিনের বেশিরভাগ ক্ষেত্রে নিখুঁত বলে মনে হচ্ছে। তবে, একটি জিনিস যা আমি দেখছি না তা হ'ল মার্কডাউন ফর্ম্যাটিং (যেমন সাজানো xtable, তবে ল্যাটেক্স বা এইচটিএমএল এর পরিবর্তে মার্কডাউন সহ) ডেটা ফ্রেম এবং টেবিলগুলি প্রিন্ট করা সহজ উপায় । আমি জানি যে আমি মাত্র xtable থেকে এইচটিএমএল আউটপুট এম্বেড করতে পারি, তবে আমি ভাবছিলাম যে কোনও মার্কডাউন-ভিত্তিক সমাধান আছে কিনা?


3
টেক্সটেবল এবং এইচটিএমএল বিবেচনা করে .. এর সাথে এইচটিএমএল কোড প্রিন্ট করুন print(xtable(data), type = "html")
user974514

7
@ তারেহমান আপনার প্রশ্ন আমাকে মনে করিয়ে দিয়েছে যে এখনও কোনও সমাধান নেই যা টেবিলের সাথে সরাসরি সামঞ্জস্যপূর্ণ knitr, তাই আমি panderটেবিলের শৈলী যুক্ত করতে একটি অনুরোধ পাঠিয়েছি । ভবিষ্যতের সংস্করণগুলিতে pander, আপনি করতে সক্ষম হবেনpandoc.table(iris, style="rmarkdown")
মারিউস

1
@ মারিয়াস আপনি কী জানেন যে প্যান্ডোক সিআরএন-এর অংশ নয় কেন? বা কখন এটি এর অংশ হতে পারে? উৎসুক.
তারেহমান

2
@ তারেহমান আমি নিশ্চিত নই যে আপনি বোঝাচ্ছেন বা পান্ডোক। panderCRAN এ থাকা উচিত। প্যান্ডোক হ্যাসকেলে লিখিত একটি প্রোগ্রাম যা বিভিন্ন ধরণের বিভিন্ন ফর্ম্যাটে রূপান্তর করে এবং এটি কোনওভাবেই আর এর সাথে নির্দিষ্ট নয়।
মারিয়াস

1
দুঃখিত, আমি বোঝাতে চেয়েছি pander, যা শেষ বার শুনেছি CRAN এ ছিল না - হয় নি pandoc। আমার ভুল. :)
তারেহমান

উত্তর:


122

এখন knitr(সংস্করণ ১.৩ থেকে) প্যাকেজটিতে kableকোনও তৈরি টেবিলের জন্য ফাংশন অন্তর্ভুক্ত রয়েছে :

> library(knitr)
> kable(head(iris[,1:3]), format = "markdown")
|  Sepal.Length|  Sepal.Width|  Petal.Length|
|-------------:|------------:|-------------:|
|           5,1|          3,5|           1,4|
|           4,9|          3,0|           1,4|
|           4,7|          3,2|           1,3|
|           4,6|          3,1|           1,5|
|           5,0|          3,6|           1,4|
|           5,4|          3,9|           1,7|

আপডেট : আপনি একটি নথি ব্যবহার করে দেখুন সেটআপ কাঁচা markdown পেতে results = "asis"খণ্ড বিকল্প।


24
নিটারের ভিতরে চলার সময়, আপনি formatযুক্তিটি ছেড়ে দিতে পারেন , যেহেতু নাইটার আউটপুট ফর্ম্যাট সম্পর্কে অবগত এবং এটি স্বয়ংক্রিয়ভাবে সেট হয়ে যাবে
ইয়িহুই Xie

3
@Yihui আপনি আশ্চর্যজনক
isomorphismes

2
আমি এটি চেষ্টা করেছিলাম, কিন্তু ... `` {r} কেবল (...) কেবল কাঁচা মার্কডাউন দেখায়
অ্যালেক্স ব্রাউন

6
স্থানীয় খণ্ড বিকল্পটি সেট করার চেষ্টা করুন results = asis
আর্টেম ক্লিভতসভ

5
এফওয়াইআই নাইটারের এখন বিন্যাসে কমান্ডটি দরকারresults = 'asis'
স্টেডি

32

দুটি প্যাকেজ যা এটি করবে are হতাশ ander

library(devtools)
install_github('pander', 'Rapporter')

বা আসকি

pander নির্মাণের প্রতিবেদন করার জন্য কিছুটা ভিন্ন পদ্ধতি, (তবে এই বৈশিষ্ট্যের জন্য দরকারী হতে পারে)।

asciiআপনার অনুমতি দেবে printসঙ্গেtype = 'pandoc (বা বিভিন্ন মার্কাউন ডাউন স্বাদ)

library(ascii)
print(ascii(head(iris[,1:3])), type = 'pandoc')



    **Sepal.Length**   **Sepal.Width**   **Petal.Length**  
--- ------------------ ----------------- ------------------
1   5.10               3.50              1.40              
2   4.90               3.00              1.40              
3   4.70               3.20              1.30              
4   4.60               3.10              1.50              
5   5.00               3.60              1.40              
6   5.40               3.90              1.70              
--- ------------------ ----------------- ------------------

নোট করুন যে এই উভয় ক্ষেত্রেই এটি pandocমার্কডাউন থেকে আপনার পছন্দসই দলিলের ধরণে রূপান্তর করতে ব্যবহারের দিকে পরিচালিত হয়েছে , তবে ব্যবহার করে style='rmarkdown'এই markdownপ্যাকেজটির সাথে সামঞ্জস্যপূর্ণ সারণী তৈরি করা হবে এবং ইনবিল্ট রূপান্তর ইন হবে rstudio


3
সম্পর্কে কেবল একটি নোট pander: এটি rmarkdownঅন্যদের পাশাপাশি স্টাইলযুক্ত টেবিলগুলিও তৈরি করতে পারে , যেমন:pander(head(iris[,1:3]), style = 'rmarkdown')
daroczig

@दरোকজিগ - ধন্যবাদ এবং এখনই উত্তরে উল্লেখ করা হয়েছে,
1313 22-22

26

আমি যা করতে স্থির হয়েছি তা দিয়েই এটি আপডেট করতে চেয়েছি। hwriterটেবিলগুলি মুদ্রণের জন্য আমি এখনই প্যাকেজটি ব্যবহার করছি row.*এবং col.*সিএসএস ক্লাসে বিভিন্ন উপাদানগুলিতে লাগাতে বৈশিষ্ট্যগুলি ব্যবহার করছি । তারপরে, আমি আমার ডিসপ্লেটি যেমন চাই তেমন কাস্টম সিএসএস লিখেছিলাম। সুতরাং, এখানে অন্য যে কোনও একটির সাথে একই রকম আচরণ করা হচ্ছে তার উদাহরণ এখানে।

প্রথমে এমন একটি ফাইল তৈরি করুন যা কাজটি করবে knittingএবং মার্কডাউনকে এইচটিএমএল-তে পরিবর্তন করবে:

FILE: file_knit.r
#!/usr/bin/env Rscript

library(knitr)
library(markdown)

knit("file.Rmd")
markdownToHTML("file.md","file.html",stylesheet="~/custom.css")

এরপরে, আসল মার্কডাউন ফাইলটি তৈরি করুন:

FILE: file.Rmd
Report of Fruit vs. Animal Choices
==================================

This is a report of fruit vs. animal choices.

```{r echo=FALSE,results='asis'}
library(hwriter)
set.seed(9850104)
my.df <- data.frame(Var1=sample(x=c("Apple","Orange","Banana"),size=40,replace=TRUE),
                    Var2=sample(x=c("Dog","Cat","Bunny"),size=40,replace=TRUE))

tbl1 <- table(my.df$Var1,my.df$Var2)

tbl1 <- cbind(tbl1,rowSums(tbl1))
tbl1 <- rbind(tbl1,colSums(tbl1))

colnames(tbl1)[4] <- "TOTAL"
rownames(tbl1)[4] <- "TOTAL"

# Because I used results='asis' for this chunk, I can just use cat() and hwrite() to 
# write out the table in HTML. Using hwrite()'s row.* function, I can assign classes
# to the various table elements.
cat(hwrite(tbl1,
           border=NA,
           table.class="t1",
           row.class=list(c("header col_first","header col","header col","header col", "header col_last"),
                          c("col_first","col","col","col","col_last"),
                          c("col_first","col","col","col","col_last"),
                          c("col_first","col","col","col","col_last"),
                          c("footer col_first","footer col","footer col","footer col","footer col_last"))))
```

অবশেষে, কেবল একটি কাস্টম সিএসএস ফাইল তৈরি করুন।

FILE: custom.css
body {
  font-family: sans-serif;
  background-color: white;
  font-size: 12px;
  margin: 20px;
}

h1 {font-size:1.5em;}

table {
  border: solid;
  border-color: black;
  border-width: 2px;
  border-collapse: collapse;
  margin-bottom: 20px;
  text-align: center;
  padding: 0px;
}

.t1 .header {
  color: white;
  background-color: black;
  border-bottom: solid;
  border-color: black;
  border-width: 2px;
  font-weight: bold;
}

.t1 .footer {
  border-top: solid;
  border-color: black;
  border-width: 2px;
}

.t1 .col_first {
  border-right: solid;
  border-color: black;
  border-width: 2px;
  text-align: left;
  font-weight: bold;
  width: 75px;
}

.t1 .col {
  width: 50px;
}

.t1 .col_last {
  width: 50px;
  border-left: solid;
  border-color: black;
  border-width: 2px;
}

নির্বাহ ./file_knit.rআমাকে file.html দেয়, যা এই মত দেখায়:

উদাহরণ আউটপুট

সুতরাং, আশা করি এটি অন্যদের জন্য সহায়ক হতে পারে যারা মার্কডাউন আউটপুটে কিছুটা বেশি ফর্ম্যাটিং চান!


1
হ্যাঁ, না মার্কডাউন -> এইচটিএমএল দিয়ে কাজ করবে তবে মার্কডাউন -> পিডিএফ, মার্কডাউন -> ডকএক্সের সাথে নয় ... প্রশ্নটি কেবল মার্কডাউনকেই এটিএমএল ফাইল তৈরি করার উদ্দেশ্যে নয় - এটি আপনার হতে পারে উদ্দেশ্য, কিন্তু সেখানে লেখা হয় না।
পিটারমিইসনার

আপনি কি খেয়াল করেছেন আমি নিজের প্রশ্নের উত্তর দিচ্ছি? আমি যদি প্রশ্নটি সম্পাদনা করতে পারি বা অন্যভাবে ট্যাগ করতে পারি আপনি যদি ভাবেন যে এটি সাহায্য করবে?
তারেহমান

ঘটনাচক্রে, এই উত্তরের সময়ে, নিটার কেবল এইচটিএমএলকে সমর্থন করছিল। এই কারণে প্রশ্নটি এইচটিএমএল সম্পর্কে স্পষ্ট করে কিছু বলে না।
তারেহমান

জিপ, প্রশ্ন পরিবর্তন করা সাহায্য করবে ... তবে এটি যখন আরও বিস্তৃত এবং সাধারণ হয়ে উঠলে সবার বেশি ব্যবহার হয় তখন কেন এটি আরও নির্দিষ্ট করা যায়? আপনার নিজের প্রশ্নের উত্তর দেওয়ার ক্ষেত্রে, অন্যরা মার্কডডাউন ফর্ম্যাটে টেবিলগুলি সরবরাহ করে যা আপনি এইচটিএমএল ফর্ম্যাটে সারণী সরবরাহ করেন - এটি ভুল নয় তবে আমি অন্যান্য উত্তরগুলি কেবল বিন্দুতে মার্জিত এবং আরও সহায়ক বলে মনে করি। প্রত্যেকেরই আপনার উত্তর পছন্দ করতে হবে না, এটি কি আপনার উত্তরটি পছন্দ করে না?
পিটারমিইসনার

7
আপনি নিজেই বলেছেন যে আমার উত্তরটি ভুল নয়, তবে অন্যরা আরও ভাল। ভোটিং সিস্টেমের সঠিক প্রয়োগটি উত্তম উত্তরগুলিকে উঁচু করে তোলা, খনিকে নিচে নামানো নয়। এখানে আরও দেখুন: stackoverflow.com/help/privileges/vote-down "যখনই আপনি কোনও গুরুতরভাবে opালু, কোনও প্রয়াস-ব্যয় করা পোস্ট, বা স্পষ্ট এবং সম্ভবত বিপজ্জনকভাবে ভুল একটি উত্তরের মুখোমুখি হন তখন আপনার ডাউনটি ব্যবহার করুন" "
তারেহমান

18

panderপ্যাকেজে ফাংশন রয়েছে :

> library(pander)
> pandoc.table(head(iris)[, 1:3])

-------------------------------------------
 Sepal.Length   Sepal.Width   Petal.Length 
-------------- ------------- --------------
     5.1            3.5           1.4      

     4.9             3            1.4      

     4.7            3.2           1.3      

     4.6            3.1           1.5      

      5             3.6           1.4      

     5.4            3.9           1.7      
-------------------------------------------

4
প্রচারের জন্য ধন্যবাদ pander:) দয়া করে নোট করুন যে আপনি কয়েকটি অক্ষর টাইপ করতে জেনেরিক এস 3 পদ্ধতিটি ব্যবহার করতে পারেন যেমন:pander(head(iris)[, 1:3])
দারোকজিগ

12

আপনার নিজস্ব কাস্টমাইজড ফাংশনটি তৈরি করা খুব কঠিন নয়। একটি এর একটি রমারডাউন টেবিল তৈরি করার জন্য ধারণার খুব সাধারণ প্রমাণ এখানে রয়েছে data.frame:

   rmarkdownTable <- function(df){
      cat(paste(names(df), collapse = "|"))
      cat("\n")
      cat(paste(rep("-", ncol(df)), collapse = "|"))
      cat("\n")

      for(i in 1:nrow(df)){
        cat(paste(df[i,], collapse = "|"))
        cat("\n")
        }
    invisible(NULL)
    }

.আরএমডি ডকুমেন্টে আপনি তখন এর সাথে ফাংশনটি ব্যবহার করবেন results = 'asis':

```{r, results = 'asis'}
rmarkdownTable <- function(df){
  cat(paste(names(df), collapse = "|"))
  cat("\n")
  cat(paste(rep("-", ncol(df)), collapse = "|"))
  cat("\n")

  for(i in 1:nrow(df)){
    cat(paste(df[i,], collapse = "|"))
    cat("\n")
    }
invisible(NULL)
}

rmarkdownTable(head(iris))
```

উপরের কোডটি আপনাকে নিম্নলিখিত চিত্রটি দেবে (উদাহরণস্বরূপ এটি পিডিএফ আউটপুট, তবে যেহেতু টেবিলটি মার্কডওয়নে রয়েছে তাই আপনি এইচটিএমএল বা শব্দেও বুনতে পারবেন)।

এখানে চিত্র বর্ণনা লিখুন এখান থেকে - এবং অন্যান্য লোকের কোড পড়তে - আপনি কী সারণীটি চান তা তৈরি করতে আরও বেশি ব্যক্তিগতকৃত ক্রিয়াকলাপ তৈরি করতে কীভাবে টেক্সট পরিচালনা করতে হয় তা নির্ধারণ করতে পারেন figure


1
এটি দুর্দান্ত তবে আপনি কি জানেন কীভাবে কেন্দ্রিক পরিবর্তে বাম দিকে এই সারিবদ্ধ করা যায়?
প্যাট্রিক

3

আপনার মার্কডাউন ডকুমেন্টে নিটার :: কেবেল এবং xtable এর সংমিশ্রণটি ব্যবহার করুন।

library("knitr","xtable")

একটি সাধারণ ডেটা.ফ্রেমে -

kable(head(mtcars[,1:4]),format="markdown")
kable(head(mtcars[,1:4]),format="pandoc",caption="Title of the table")

format="pandoc" ক্যাপশনের মতো আরও বিকল্পের অনুমতি দেয়।

মডেল সারাংশ জন্য এখন সংমিশ্রণ ।

data(tli)
fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data=tli)
kable(xtable(fm1), caption = "Annova table")

এমনকি আরও বিকল্পগুলির stargazerপরিবর্তে প্যাকেজটির দিকে নজর দিন xtable

ব্যক্তিগত ব্যবহারের জন্য উদাহরণ


1

আর-তে মার্কডাউন টেবিলগুলি লিখতে / তৈরি করতে, আপনি মার্কডাউনআরপোর্টস ' MarkDown_Table_writer_DF_RowColNames() বা MarkDown_Table_writer_NamedVector()ফাংশনগুলিও ব্যবহার করতে পারেন । আপনি মাত্র একটি মাত্রার নাম সহ একটি ডেটা ফ্রেম / ম্যাট্রিক্স, বা নামগুলির সাথে একটি ভেক্টর দিয়ে গেছেন এবং এটি মার্কডাউন ফর্ম্যাটে টেবিলটিকে বিশ্লেষণ করে এবং লিখেছেন।


0

গীতলাবের জন্য আমার কাজ:

to_markdown<-function(df) {
    wrap<-function(x,sep=" ") paste0("|", sep, paste(x, collapse=paste0(sep,"|",sep)), sep, "|", sep=sep)
    paste0(wrap(colnames(df)),
    "\n",
    wrap(rep("------", ncol(df)),sep=""),
    "\n",
    paste(apply(df, 1, wrap), collapse="\n"))
}

cat(to_markdown(head(iris[,1:3])))
| Sepal.Length | Sepal.Width | Petal.Length | 
|------|------|------|
| 5.1 | 3.5 | 1.4 | 
| 4.9 | 3 | 1.4 | 
| 4.7 | 3.2 | 1.3 | 
| 4.6 | 3.1 | 1.5 | 
| 5 | 3.6 | 1.4 | 
| 5.4 | 3.9 | 1.7 | 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.