diff --git a/R/knitr-engine.R b/R/knitr-engine.R index 3e9951fa9..0f1dfe20e 100644 --- a/R/knitr-engine.R +++ b/R/knitr-engine.R @@ -676,8 +676,25 @@ eng_python_autoprint <- function(captured, options) { } else if (inherits(value, "pandas.core.frame.DataFrame")) { - return(captured) + # this comes from https://github.com/yihui/knitr/blob/7bc8b393e261c88f299bccc7eee40b4e952ebd57/R/output.R#L197 + isQuarto <- !is.null(knitr::opts_knit$get('quarto.version')) + renderDF <- getOption("reticulate.engine.render_df", default = TRUE) + + # Quarto documents running Python with the Jupyter engine return richly rendered + # data.frames and we want keep the same behavior for documents rendered with + # the knitr engine + if (isQuarto && renderDF) { + return(eng_python_generic_autoprint(captured, value)) + } + # we respect the Rmarkdown `df_print` option that allows to control how + # to display data.frames in the document. In the case it's not the default, + # we cast into an R data.frame and let knitr handle the rendering. + if (knitr::opts_knit$get("rmarkdown.df_print") != "default" && renderDF) { + return(knitr::knit_print(py_to_r(value), options = options)) + } + + return(captured) } else if (isHtml && py_has_method(value, "_repr_html_")) { py_capture_output({ @@ -730,7 +747,13 @@ eng_python_autoprint <- function(captured, options) { return("") - } else if (py_has_method(value, "_repr_markdown_")) { + } else { + return(eng_python_generic_autoprint(captured, value)) + } +} + +eng_python_generic_autoprint <- function(captured, value) { + if (py_has_method(value, "_repr_markdown_")) { data <- as_r_value(value$`_repr_markdown_`()) .engine_context$pending_plots$push(knitr::asis_output(data)) @@ -748,5 +771,4 @@ eng_python_autoprint <- function(captured, options) { return(captured) } - } diff --git a/tests/testthat/_snaps/python-knitr-engine/default.html b/tests/testthat/_snaps/python-knitr-engine/default.html new file mode 100644 index 000000000..31a6c26bc --- /dev/null +++ b/tests/testthat/_snaps/python-knitr-engine/default.html @@ -0,0 +1,439 @@ + + + + +
+ + + + + + + + +r.mtcars
+## mpg cyl disp hp drat ... qsec vs am gear carb
+## Mazda RX4 21.0 6.0 160.0 110.0 3.90 ... 16.46 0.0 1.0 4.0 4.0
+## Mazda RX4 Wag 21.0 6.0 160.0 110.0 3.90 ... 17.02 0.0 1.0 4.0 4.0
+## Datsun 710 22.8 4.0 108.0 93.0 3.85 ... 18.61 1.0 1.0 4.0 1.0
+## Hornet 4 Drive 21.4 6.0 258.0 110.0 3.08 ... 19.44 1.0 0.0 3.0 1.0
+## Hornet Sportabout 18.7 8.0 360.0 175.0 3.15 ... 17.02 0.0 0.0 3.0 2.0
+## Valiant 18.1 6.0 225.0 105.0 2.76 ... 20.22 1.0 0.0 3.0 1.0
+## Duster 360 14.3 8.0 360.0 245.0 3.21 ... 15.84 0.0 0.0 3.0 4.0
+## Merc 240D 24.4 4.0 146.7 62.0 3.69 ... 20.00 1.0 0.0 4.0 2.0
+## Merc 230 22.8 4.0 140.8 95.0 3.92 ... 22.90 1.0 0.0 4.0 2.0
+## Merc 280 19.2 6.0 167.6 123.0 3.92 ... 18.30 1.0 0.0 4.0 4.0
+## Merc 280C 17.8 6.0 167.6 123.0 3.92 ... 18.90 1.0 0.0 4.0 4.0
+## Merc 450SE 16.4 8.0 275.8 180.0 3.07 ... 17.40 0.0 0.0 3.0 3.0
+## Merc 450SL 17.3 8.0 275.8 180.0 3.07 ... 17.60 0.0 0.0 3.0 3.0
+## Merc 450SLC 15.2 8.0 275.8 180.0 3.07 ... 18.00 0.0 0.0 3.0 3.0
+## Cadillac Fleetwood 10.4 8.0 472.0 205.0 2.93 ... 17.98 0.0 0.0 3.0 4.0
+## Lincoln Continental 10.4 8.0 460.0 215.0 3.00 ... 17.82 0.0 0.0 3.0 4.0
+## Chrysler Imperial 14.7 8.0 440.0 230.0 3.23 ... 17.42 0.0 0.0 3.0 4.0
+## Fiat 128 32.4 4.0 78.7 66.0 4.08 ... 19.47 1.0 1.0 4.0 1.0
+## Honda Civic 30.4 4.0 75.7 52.0 4.93 ... 18.52 1.0 1.0 4.0 2.0
+## Toyota Corolla 33.9 4.0 71.1 65.0 4.22 ... 19.90 1.0 1.0 4.0 1.0
+## Toyota Corona 21.5 4.0 120.1 97.0 3.70 ... 20.01 1.0 0.0 3.0 1.0
+## Dodge Challenger 15.5 8.0 318.0 150.0 2.76 ... 16.87 0.0 0.0 3.0 2.0
+## AMC Javelin 15.2 8.0 304.0 150.0 3.15 ... 17.30 0.0 0.0 3.0 2.0
+## Camaro Z28 13.3 8.0 350.0 245.0 3.73 ... 15.41 0.0 0.0 3.0 4.0
+## Pontiac Firebird 19.2 8.0 400.0 175.0 3.08 ... 17.05 0.0 0.0 3.0 2.0
+## Fiat X1-9 27.3 4.0 79.0 66.0 4.08 ... 18.90 1.0 1.0 4.0 1.0
+## Porsche 914-2 26.0 4.0 120.3 91.0 4.43 ... 16.70 0.0 1.0 5.0 2.0
+## Lotus Europa 30.4 4.0 95.1 113.0 3.77 ... 16.90 1.0 1.0 5.0 2.0
+## Ford Pantera L 15.8 8.0 351.0 264.0 4.22 ... 14.50 0.0 1.0 5.0 4.0
+## Ferrari Dino 19.7 6.0 145.0 175.0 3.62 ... 15.50 0.0 1.0 5.0 6.0
+## Maserati Bora 15.0 8.0 301.0 335.0 3.54 ... 14.60 0.0 1.0 5.0 8.0
+## Volvo 142E 21.4 4.0 121.0 109.0 4.11 ... 18.60 1.0 1.0 4.0 2.0
+##
+## [32 rows x 11 columns]
+
+
+
+
+r.mtcars
+| + | mpg | +cyl | +disp | +hp | +drat | +wt | +qsec | +vs | +am | +gear | +carb | +
|---|---|---|---|---|---|---|---|---|---|---|---|
| Mazda RX4 | +21.0 | +6 | +160.0 | +110 | +3.90 | +2.620 | +16.46 | +0 | +1 | +4 | +4 | +
| Mazda RX4 Wag | +21.0 | +6 | +160.0 | +110 | +3.90 | +2.875 | +17.02 | +0 | +1 | +4 | +4 | +
| Datsun 710 | +22.8 | +4 | +108.0 | +93 | +3.85 | +2.320 | +18.61 | +1 | +1 | +4 | +1 | +
| Hornet 4 Drive | +21.4 | +6 | +258.0 | +110 | +3.08 | +3.215 | +19.44 | +1 | +0 | +3 | +1 | +
| Hornet Sportabout | +18.7 | +8 | +360.0 | +175 | +3.15 | +3.440 | +17.02 | +0 | +0 | +3 | +2 | +
| Valiant | +18.1 | +6 | +225.0 | +105 | +2.76 | +3.460 | +20.22 | +1 | +0 | +3 | +1 | +
| Duster 360 | +14.3 | +8 | +360.0 | +245 | +3.21 | +3.570 | +15.84 | +0 | +0 | +3 | +4 | +
| Merc 240D | +24.4 | +4 | +146.7 | +62 | +3.69 | +3.190 | +20.00 | +1 | +0 | +4 | +2 | +
| Merc 230 | +22.8 | +4 | +140.8 | +95 | +3.92 | +3.150 | +22.90 | +1 | +0 | +4 | +2 | +
| Merc 280 | +19.2 | +6 | +167.6 | +123 | +3.92 | +3.440 | +18.30 | +1 | +0 | +4 | +4 | +
| Merc 280C | +17.8 | +6 | +167.6 | +123 | +3.92 | +3.440 | +18.90 | +1 | +0 | +4 | +4 | +
| Merc 450SE | +16.4 | +8 | +275.8 | +180 | +3.07 | +4.070 | +17.40 | +0 | +0 | +3 | +3 | +
| Merc 450SL | +17.3 | +8 | +275.8 | +180 | +3.07 | +3.730 | +17.60 | +0 | +0 | +3 | +3 | +
| Merc 450SLC | +15.2 | +8 | +275.8 | +180 | +3.07 | +3.780 | +18.00 | +0 | +0 | +3 | +3 | +
| Cadillac Fleetwood | +10.4 | +8 | +472.0 | +205 | +2.93 | +5.250 | +17.98 | +0 | +0 | +3 | +4 | +
| Lincoln Continental | +10.4 | +8 | +460.0 | +215 | +3.00 | +5.424 | +17.82 | +0 | +0 | +3 | +4 | +
| Chrysler Imperial | +14.7 | +8 | +440.0 | +230 | +3.23 | +5.345 | +17.42 | +0 | +0 | +3 | +4 | +
| Fiat 128 | +32.4 | +4 | +78.7 | +66 | +4.08 | +2.200 | +19.47 | +1 | +1 | +4 | +1 | +
| Honda Civic | +30.4 | +4 | +75.7 | +52 | +4.93 | +1.615 | +18.52 | +1 | +1 | +4 | +2 | +
| Toyota Corolla | +33.9 | +4 | +71.1 | +65 | +4.22 | +1.835 | +19.90 | +1 | +1 | +4 | +1 | +
| Toyota Corona | +21.5 | +4 | +120.1 | +97 | +3.70 | +2.465 | +20.01 | +1 | +0 | +3 | +1 | +
| Dodge Challenger | +15.5 | +8 | +318.0 | +150 | +2.76 | +3.520 | +16.87 | +0 | +0 | +3 | +2 | +
| AMC Javelin | +15.2 | +8 | +304.0 | +150 | +3.15 | +3.435 | +17.30 | +0 | +0 | +3 | +2 | +
| Camaro Z28 | +13.3 | +8 | +350.0 | +245 | +3.73 | +3.840 | +15.41 | +0 | +0 | +3 | +4 | +
| Pontiac Firebird | +19.2 | +8 | +400.0 | +175 | +3.08 | +3.845 | +17.05 | +0 | +0 | +3 | +2 | +
| Fiat X1-9 | +27.3 | +4 | +79.0 | +66 | +4.08 | +1.935 | +18.90 | +1 | +1 | +4 | +1 | +
| Porsche 914-2 | +26.0 | +4 | +120.3 | +91 | +4.43 | +2.140 | +16.70 | +0 | +1 | +5 | +2 | +
| Lotus Europa | +30.4 | +4 | +95.1 | +113 | +3.77 | +1.513 | +16.90 | +1 | +1 | +5 | +2 | +
| Ford Pantera L | +15.8 | +8 | +351.0 | +264 | +4.22 | +3.170 | +14.50 | +0 | +1 | +5 | +4 | +
| Ferrari Dino | +19.7 | +6 | +145.0 | +175 | +3.62 | +2.770 | +15.50 | +0 | +1 | +5 | +6 | +
| Maserati Bora | +15.0 | +8 | +301.0 | +335 | +3.54 | +3.570 | +14.60 | +0 | +1 | +5 | +8 | +
| Volvo 142E | +21.4 | +4 | +121.0 | +109 | +4.11 | +2.780 | +18.60 | +1 | +1 | +4 | +2 | +
r.mtcars
+