Экспортировать две таблицы последовательно с выводом, похожим на expss

Я пытаюсь создать функцию, в которой я могу использовать две таблицы, если параметр num равен TRUE. но он показывает только одну таблицу вместо двух таблиц.

он должен отображать две таблицы, когда параметр num == TRUE

library(expss)
mtcars = apply_labels(mtcars,
                      mpg = "Miles/(US) gallon",
                      cyl = "Number of cylinders",
                      disp = "Displacement (cu.in.)",
                      hp = "Gross horsepower",
                      drat = "Rear axle ratio",
                      wt = "Weight (1000 lbs)",
                      qsec = "1/4 mile time",
                      vs = "Engine",
                      vs = c("V-engine" = 0,
                             "Straight engine" = 1),
                      am = "Transmission",
                      am = c("Automatic" = 0,
                             "Manual"=1),
                      gear = "Number of forward gears",
                      carb = "Number of carburetors"
)


banner <-  with(mtcars,list(total(), am))

var <- "mpg"
data = mtcars


func1 <- function(data,var,banner,num){

if (num==TRUE) {
 
df1 <- expss::cro_cpct(data[[var]],banner)
df2 <- cross_fun(data,
          data[[var]],
          col_vars = banner,
          row_vars = vs,
          fun = combine_functions(Mean = mean,
                                  'Std. dev.' = sd,
                                  'Valid N' = valid_n))
      df1
      df2
}else{
  df1 <- expss::cro_cpct(data[[var]],banner)
  df1
             }


}

t1 <- func1(mtcars,"mpg",banner,num=FALSE)

я экспортирую эти таблицы в файл xlsx

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
19
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В R, если вы явно не используете return() в своих функциях для возврата объекта, R вернет последний вызванный объект (см. здесь для получения дополнительной информации).

В вашем примере, когда num == TRUE вы вызываете d1 ТОГДА d2, поэтому d2 вызывается последний объект и поэтому возвращается. Функции могут возвращать только один объект, поэтому, если вы хотите вернуть обе таблицы, вам нужно объединить их в список, а затем вы можете вернуть обе таблицы как один объект.

Эта модификация вашей функции должна дать вам то, что вы хотите.

func1 <- function(data, var, banner, num){
  if (num==TRUE) {
    df1 <- expss::cro_cpct(data[[var]], banner)
    df2 <- cross_fun(data,
                     data[[var]],
                     col_vars = banner,
                     row_vars = vs,
                     fun = combine_functions(Mean = mean,
                                             'Std. dev.' = sd,
                                             'Valid N' = valid_n))
    return(list(df1, df2))
    
  } else {
    df1 <- expss::cro_cpct(data[[var]], banner)
    return(df1)
  }
}

Затем вы можете получить доступ к df1 и df2 путем индексации.

t1 <- func1(mtcars, "mpg", banner,  num=TRUE)
t1[[1]]
t1[[2]]

Спасибо, а как насчет того, если я хочу связать их с одной пустой строкой между ними, то ..??

str_rst 10.04.2022 19:11

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