Минимальный пример приведен внизу, и он работает так, как ожидалось. Проблема заключается в том, что при назначении возвращаемой таблицы (см. ниже) вся печать исчезает. (Я визуализирую в формате html в Quarto.)
a<-create_reactable(1:10)
dosomething(a)
b<-create_reactable(20:30)
dosomething(b)
c<-create_reactable(30:40)
dosomething(c)
Я пытаюсь создать небольшую функцию, которая выполняет некоторую обработку, печатает обработанную таблицу и возвращает обработанную таблицу. (Эта функция позже будет использоваться для вызова из цикла)
{r}
# Load the reactable package
library(reactable)
# Define the function
create_reactable <- function(values) {
# Create a data frame with values and their squares
df <- data.frame(
Column1 = values,
Column3 = values^2
)
# Create the reactable
table <- reactable(df)
# Print the reactable
print(reactable(df))
# Return the reactable
return(table)
}
# Call the function for different ranges
create_reactable(1:10)
create_reactable(20:30)
create_reactable(30:40)
Я понял, что дескриптор R возвращается немного по-другому. Однако не удалось найти решение, которое бы работало с печатью, возвратом и назначением возврата, как описано.
Пожалуйста, порекомендуйте.
Ожидаемый результат: Проблема при назначении :
Под «немного по-другому» я имел в виду возврат последнего назначенного значения, даже если явного возврата нет. Ожидаемый результат — распечатка трех таблиц. create_reactable(1:10) распечатывает таблицу, как и ожидалось. a<-create_reactable(1:10) не печатать таблицу.
См. этот пост, чтобы по-прежнему печатать при назначении результата объекту.
@ julien.leroux5, это сработало для невидимого (x + 1), как в этом вопросе. Однако для невидимой (таблицы) в моем случае это не сработало (т. е. таблица не была напечатана. Позвольте мне посмотреть, смогу ли я обновить вопрос, добавив снимок экрана ожидаемого результата)
да, invisible
в вашем случае не работает, но (a<-create_reactable(1:10))
работает.
Ожидаемый и фактический результат добавлен сейчас.
@julien.leroux5, при заключении () происходит печать. Я согласен. Но я сомневаюсь, что печатается не печать (таблица) изнутри функции. Чтобы проиллюстрировать, если мы изменим невидимый возврат к df вместо таблицы. сделайте что-то вроде {... invisible(df)} (a<-create_reactable(1:10)) print(a), это df, который печатается дважды.
Как вы можете видеть здесь, это связано с тем, как Quarto обрабатывает объекты печати с помощью пакета knitr
.
Вы можете получить напечатанные реагирующие объекты, используя функцию knit_print()
(после загрузки knitr
с помощью library(knitr)
) вместо print
.
В качестве общей рекомендации (см. обсуждение в ответах этого поста), вам, вероятно, следует печатать объекты после создания, а не непосредственно в функции для их создания, вызывая knit_print
вне функции:
a = create_reactable(1:10)
knit_print(a)
title: "Print From Function"
execute:
echo: true
eval: true
warning: false
format:
html:
css: style.css
---
```{r }
library(knitr)
fun <- function(df) {
print(kable(df, format = "html", table.attr = 'class = "scrollable-table"'))
return(head(df,3))
}
create_reactable <- function(values) {
df <- data.frame(
Column1 = values,
Column3 = values^2
)
fun(df)
}
```
```{r, output='asis'}
a<-create_reactable(1:10)
b<-create_reactable(20:30)
c<-create_reactable(30:40)
```
Выше приведен фактический код, который создавал таблицы из функции. На основе данных ответа @julien.leroux5. Обратите внимание на использование вывода='asis' во втором фрагменте. Также пришлось использовать кабель вместо реагирующего в исходном вопросе.
Что вы подразумеваете под «возврат ручки R немного по-другому»? И какую проблему вы испытываете? Т.е. каков ожидаемый и фактический результат вашего фрагмента кода внизу?