1) Làm thế nào để bạn loại bỏ các chỉ mục danh sách (như [[2]]) trên mỗi trang đứng trước mỗi ô? Sử dụng echo = FALSE không làm gì cả.
Lô mỗi phần tử trong danh sách riêng (lapply
) và ẩn các đầu ra từ lapply
(invisible
):
invisible(lapply(plots, print))
2) Có thể thiết lập kích thước cho từng lô như họ đang có kết xuất? Tôi đã thử thiết lập một biến kích thước bên ngoài của đoạn, nhưng điều đó chỉ cho phép tôi sử dụng một giá trị và không phải là một giá trị khác nhau cho mỗi lô.
Có. Nói chung, khi bạn chuyển vectơ cho các tùy chọn đoạn liên quan đến hình, phần tử i
th được sử dụng cho ô i
th. Điều này áp dụng cho các tùy chọn "cụ thể hình" như ví dụ: fig.cap
, fig.scap
, out.width
và out.height
.
Tuy nhiên, các tùy chọn hình khác là "thiết bị cụ thể". Để hiểu điều này, điều quan trọng là để có một cái nhìn tại các optiondev
:
dev
: tên hàm đó sẽ được sử dụng như một thiết bị đồ họa để ghi lại âm mưu [...] các tùy chọn dev
, fig.ext
, fig.width
, fig.height
và dpi
có thể là vectơ (các vectơ ngắn hơn sẽ được tái chế), ví dụ<<foo, dev=c('pdf', 'png')>>=
tạo ra hai tập tin cho cốt truyện giống nhau: foo.pdf
và foo.png
Trong khi đi qua một vector với "con số cụ thể" tùy chọn out.height
có hậu quả của yếu tố i
thứ được sử dụng cho i
thứcốt truyện, đi qua một vector vào tùy chọn "thiết bị cụ thể" có hậu quả của các yếu tối
thứ được sử dụng cho i
thứdev băng.
Do đó, tạo ra âm mưu động có kích thước cần một số tấn công vào khối vì một đoạn không thể tạo lô với fig.height
cài đặt khác nhau. Giải pháp sau dựa trên ví dụ knitr
`075-knit-expand.Rnw và this post on r-bloggers.com (giải thích this answer on SO).
Ý tưởng của giải pháp là sử dụng mẫu đoạn và mở rộng các giá trị mẫu với các biểu thức thích hợp để tạo các khối, đến lượt nó, tạo ra các ô với cài đặt fig.height
phù hợp. Mẫu mở rộng sẽ được chuyển cho knit
để đánh giá các đoạn:
\documentclass{article}
\begin{document}
<<diamond_plots, echo = FALSE, results = "asis">>==
library(ggplot2)
library(knitr)
diamond_plot = function(data, cut_type){
ggplot(data, aes(color, fill=cut)) +
geom_bar() +
ggtitle(paste("Cut:", cut_type, sep = ""))
}
cuts = unique(diamonds$cut)
template <- "<<plot-cut-{{i}}, fig.height = {{height}}, echo = FALSE>>=
data = subset(diamonds, cut == cuts[i])
plot(diamond_plot(data, cuts[i]))
@"
for (i in seq_along(cuts)) {
cat(knit(text = knit_expand(text = template, i = i, height = 2 * i), quiet = TRUE))
}
@
\end{document}
Mẫu được mở rộng sử dụng knit_expand
thay thế các biểu thức trong {{}}
bởi các giá trị tương ứng.
Đối với cuộc gọi knit
, điều quan trọng là sử dụng quite = TRUE
. Nếu không, knit
sẽ gây ô nhiễm tài liệu chính với thông tin nhật ký.
Sử dụng cat
là điều quan trọng để tránh ngầm định print
có thể làm mất hiệu lực đầu ra khác. Vì lý do tương tự, đoạn "bên ngoài" (diamond_plots
) sử dụng results = "asis"
.
Được bình chọn và chấp nhận, mặc dù tôi sẽ lưu ý (như bạn đã làm, quá!) Mà tôi thấy sự biến dạng đáng kể vì out.height vs fig.height. Nếu tôi/ai đó có thể tìm ra cách để có được xung quanh sự biến dạng đó sẽ là sao - Tôi sẽ báo cáo lại nếu tôi tìm ra nó. – Nancy
Lỗi tôi nhận được khi tôi cố gắng đặt fig.height là biến là "Lỗi trong các tùy chọn [[sprintf (" fig.% S ", i)]] * tùy chọn $ dpi:" – Nancy
Thông báo lỗi này sẽ chỉ xảy ra nếu bạn vượt qua một cái gì đó như 'paste0 (seq_along (cắt) * 4," cm ")' thành 'fig.height'. Điều này là do 'fig.height' phải là số; 'fig.height = seq_along (vết cắt)' * nên * hoạt động (IMHO), nhưng không làm gì cả. –