> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/vi/chu-de-khac/29-knitr.md).

# Knitr

Như đã lưu ý trên Wikipedia, [Knitr là một công cụ tạo báo cáo động với R](https://en.wikipedia.org/wiki/Knitr), một ngôn ngữ lập trình định hướng thống kê. Bài viết này giải thích cách thêm mã R vào tài liệu LaTeX của bạn để tạo ra đầu ra động.

Trong một bản phân phối LaTeX tiêu chuẩn, bạn phải thiết lập R trong hệ điều hành của mình và chạy một số lệnh đặc biệt để biên dịch nó. Overleaf có thể giúp bạn khỏi phiền phức đó, **knitr** hoạt động ngay khi cài đặt.

## Giới thiệu

Các tài liệu chứa mã R phải được lưu với phần mở rộng `.Rtex` hoặc `.Rnw`, nếu không mã sẽ không hoạt động. Hãy xem một ví dụ:

```latex
\documentclass{article}
\begin{document}

Bạn có thể gõ các lệnh R trong tài liệu \LaTeX{} của mình; chúng sẽ được xử lý và đầu ra của chúng sẽ được đưa vào tài liệu:

<<>>=
# Tạo một dãy số
X = 2:10

# Hiển thị các thước đo thống kê cơ bản
summary(X)

@
\end{document}
```

![KnitrDemo1.png](/files/45cd310c2fcce7715e62a1a5ef73699b0d209201)

&#x20;[Mở `knitr` ví dụ trên Overleaf](https://www.overleaf.com/project/new/template/20421?id=69881107\&templateName=Knitr+demo+1\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

Như bạn thấy, đoạn văn bản ở giữa các ký tự `<<>>=` và `@` là mã R, mã này và kết quả của nó được in theo định dạng giống danh sách. Khối mã này có thể nhận thêm một số tham số để tùy chỉnh đầu ra động. Xem phần tiếp theo.

## Các khối mã

Một khối mã như khối được trình bày ở phần trước thường được gọi là một *khối*. Bạn có thể đặt thêm một số tùy chọn trong các khối knitr. Xem ví dụ dưới đây:

```latex
\documentclass{article}
\begin{document}

Bạn có thể gõ các lệnh R trong tài liệu \LaTeX{} của mình; chúng sẽ được xử lý và đầu ra của chúng sẽ được đưa vào tài liệu:

<<echo=FALSE, cache=TRUE>>=
# Tạo một dãy số
X = 2:10

# Hiển thị các thước đo thống kê cơ bản
summary(X)

@
\end{document}
```

![KnitrDemo2.png](/files/f720f42cecc48bb958a90a0b97cc3b898113986d)

&#x20;[Mở `knitr` ví dụ trên Overleaf](https://www.overleaf.com/project/new/template/20423?id=69885763\&templateName=Knitr+demo+2\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

Có ba tùy chọn bổ sung được truyền vào bên trong `<<` và `>>`.

**echo=FALSE**

Điều này ẩn mã và chỉ in ra kết quả do R tạo ra.

**cache=TRUE**

Nếu cache được đặt thành true thì khối sẽ không được chạy, chỉ các đối tượng do nó tạo ra. Điều này tiết kiệm thời gian nếu dữ liệu trong khối đó không thay đổi. Lưu ý rằng tùy chọn cache=TRUE hiện không được hỗ trợ trong Overleaf, nhưng nó sẽ hoạt động cục bộ.

Xem [hướng dẫn tham khảo](#reference-guide) để biết thêm tùy chọn.

## Lệnh nội tuyến

Có thể truy cập các đối tượng được tạo trong một khối và in chúng trực tiếp trong dòng.

```latex
\documentclass{article}
\begin{document}

Bạn có thể gõ các lệnh R trong tài liệu \LaTeX{} của mình; chúng sẽ được xử lý và đầu ra của chúng sẽ được đưa vào tài liệu:

<<echo=FALSE, cache=TRUE>>=
# Tạo một dãy số
X = 2:10

# Hiển thị các thước đo thống kê cơ bản
summary(X)

@

Vì vậy, giá trị trung bình của dữ liệu là $\Sexpr{mean(X)}$
\end{document}
```

![KnitrDemo3.png](/files/aa5db756a8217e7f8b2ba561406f19d97b1df0f8)

&#x20;[Mở `knitr` ví dụ trên Overleaf](https://www.overleaf.com/project/new/template/20425?id=69886866\&templateName=Knitr+demo+3\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

Lệnh `\Sexpr{mean(X)}` in ra kết quả do mã R trả về `mean(X)`. Bên trong dấu ngoặc nhọn có thể truyền bất kỳ lệnh R nào.

## Đồ thị

Các đồ thị cũng có thể được thêm vào một **knitr** tài liệu. Xem ví dụ tiếp theo

```latex
\documentclass{article}
\begin{document}

<<plot1, fig.pos="t", fig.height=4, fig.width=4, fig.cap="Đồ thị đầu tiên">>=

xdata = read.csv(file="data.txt", head=TRUE,sep=" ")

hist(xdata$data, main="Biểu đồ tần suất Overleaf", xlab="Dữ liệu")

@

Hình \ref{fig:plot1} là một biểu đồ tần suất đơn giản.

\end{document}
```

![KnitrDemo4.png](/files/09a2a4b001db27eee572a1171f238d4accb0f067)

&#x20;[Mở `knitr` ví dụ trên Overleaf](https://www.overleaf.com/project/new/template/20427?id=69890965\&templateName=Knitr+demo+3\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

Biểu đồ tần suất này dùng dữ liệu được lưu trong "data.txt", được lưu trong thư mục làm việc hiện tại. Một vài tùy chọn liên quan đến hình được truyền vào khối.

**plot1**

Đây là nhãn được dùng để tham chiếu đến biểu đồ. Tiền tố "fig:" là bắt buộc. Bạn có thể thấy trong ví dụ rằng biểu đồ được tham chiếu bằng \ref{fig:plot1}.

**fig.pos="t"**

Tham số vị trí. Đây là tham số giống như được dùng trong môi trường figure.

**fig.height=4, fig.width=4**

Chiều rộng và chiều cao của hình.

**fig.cap="Đồ thị đầu tiên"**

Chú thích cho hình.

## Các script R bên ngoài

Bạn có thể nhập các phần của một script R bên ngoài vào một **knitr** tài liệu. Điều này rất hữu ích vì khá phổ biến khi viết và gỡ lỗi script trong một chương trình bên ngoài trước khi đưa nó vào tài liệu của bạn.

Giả sử chúng ta có đoạn mã R sau trong một tệp có tên `mycode.R` mà chúng ta đưa vào tài liệu LaTeX của mình:

```latex
## ---- myrcode1
# Tạo một dãy số
 X = 2:10

## ---- myrcode2
# Hiển thị các thước đo thống kê cơ bản
summary(X)
```

Hãy chú ý các dòng

```latex
## ---- myrcode1
```

và

```latex
## ---- myrcode2
```

Những dòng này đánh dấu phần bắt đầu của một khối mã và là bắt buộc nếu bạn muốn sử dụng script này trong tài liệu của mình, như được minh họa trong đoạn mã sau:

```latex
Khối dưới đây sẽ không được in ra

<<echo=FALSE, cache=FALSE>>=
read_chunk("mycode.R")
@

Mã phải xuất hiện ở đây

<<myrcode2>>=

@
```

![KnitrDemo5.png](/files/affd76372e4d2029a4a54f4e0619f478b8a25c20)

Khối đầu tiên không được in ra, nó chỉ được dùng để nhập script bằng lệnh `read_chunk("mycode.R")`, đó là lý do tùy chọn `echo=FALSE` được đặt. Ngoài ra, các script không được lưu vào bộ nhớ đệm. Sau khi script được nhập, bạn có thể in một khối bằng cách dùng nhãn bạn đặt sau `## ----`. Trong trường hợp này là `myrcode2`.

Chúng tôi đã đưa tất cả các đoạn mã của bài viết vào một dự án mà  [bạn có thể Mở trên Overleaf](https://www.overleaf.com/project/new/template/20429?id=69894649\&templateName=Knitr+full+demo\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=) .

## Hướng dẫn tham khảo

**Một số tùy chọn của khối**

* `kết quả`. Thay đổi cách hoạt động của kết quả do mã R tạo ra, các giá trị có thể là
  * `markup` Dùng LaTeX để định dạng đầu ra.
  * `asis` In ra kết quả thô từ R.
  * `hold` Giữ kết quả đầu ra lại và đẩy chúng ra ở cuối khối.
  * `hide` Ẩn kết quả.
* `echo`. Cho biết có bao gồm mã nguồn R hay không. Có thể nhận các tham số khác, `echo=2:3` chỉ in dòng thứ hai và thứ ba; `echo=-2:-3` chỉ loại trừ dòng thứ hai và thứ ba.
* `cache`. Cho biết có lưu khối mã vào bộ nhớ đệm hay không. Các giá trị có thể là `TRUE` và `FALSE`
* `highlight`. Cho biết có làm nổi bật mã nguồn hay không. Các giá trị có thể là `TRUE` và `FALSE`
* `background`. Màu nền của khối, có thể dùng định dạng rgb và HTML, giá trị mặc định là *"#F7F7F7"*.

## Đọc thêm

Để biết thêm thông tin, xem

* [Tô sáng mã với minted](/latex/vi/dinh-dang/12-code-highlighting-with-minted.md)
* [Sử dụng màu trong LaTeX](/latex/vi/dinh-dang/13-using-colors-in-latex.md)
* [đồ thị trong LaTeX](/latex/vi/theo-linh-vuc/08-pgfplots-package.md)
* [Chèn hình ảnh](/latex/vi/chu-de-khac/27-inserting-images.md)
* [Bảng](/latex/vi/hinh-va-bang/01-tables.md)
* [Định vị hình ảnh và bảng](/latex/vi/hinh-va-bang/02-positioning-images-and-tables.md)
* [Gói TikZ](/latex/vi/hinh-va-bang/05-tikz-package.md)
* [Biểu thức toán học](/latex/vi/toan-hoc/01-mathematical-expressions.md)
* [trang **knitr** trang web](http://yihui.name/knitr/)
* [trang **knitr** tài liệu hướng dẫn của gói](https://bitbucket.org/stat/knitr/downloads/knitr-manual.pdf)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/vi/chu-de-khac/29-knitr.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
