Проблема с печатью в R, когда за ней следуют возврат и присвоение

Минимальный пример приведен внизу, и он работает так, как ожидалось. Проблема заключается в том, что при назначении возвращаемой таблицы (см. ниже) вся печать исчезает. (Я визуализирую в формате 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 возвращается немного по-другому. Однако не удалось найти решение, которое бы работало с печатью, возвратом и назначением возврата, как описано.

Пожалуйста, порекомендуйте.

Ожидаемый результат: Проблема при назначении :

Что вы подразумеваете под «возврат ручки R немного по-другому»? И какую проблему вы испытываете? Т.е. каков ожидаемый и фактический результат вашего фрагмента кода внизу?

Konrad Rudolph 16.08.2024 12:38

Под «немного по-другому» я имел в виду возврат последнего назначенного значения, даже если явного возврата нет. Ожидаемый результат — распечатка трех таблиц. create_reactable(1:10) распечатывает таблицу, как и ожидалось. a<-create_reactable(1:10) не печатать таблицу.

Jeffin Rockey 16.08.2024 12:40

См. этот пост, чтобы по-прежнему печатать при назначении результата объекту.

julien.leroux5 16.08.2024 12:41

@ julien.leroux5, это сработало для невидимого (x + 1), как в этом вопросе. Однако для невидимой (таблицы) в моем случае это не сработало (т. е. таблица не была напечатана. Позвольте мне посмотреть, смогу ли я обновить вопрос, добавив снимок экрана ожидаемого результата)

Jeffin Rockey 16.08.2024 13:01

да, invisible в вашем случае не работает, но (a<-create_reactable(1:10)) работает.

julien.leroux5 16.08.2024 13:07

Ожидаемый и фактический результат добавлен сейчас.

Jeffin Rockey 16.08.2024 13:09

@julien.leroux5, при заключении () происходит печать. Я согласен. Но я сомневаюсь, что печатается не печать (таблица) изнутри функции. Чтобы проиллюстрировать, если мы изменим невидимый возврат к df вместо таблицы. сделайте что-то вроде {... invisible(df)} (a<-create_reactable(1:10)) print(a), это df, который печатается дважды.

Jeffin Rockey 16.08.2024 13:21
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Как вы можете видеть здесь, это связано с тем, как 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' во втором фрагменте. Также пришлось использовать кабель вместо реагирующего в исходном вопросе.

Другие вопросы по теме