Как экспортировать несколько значений из 1 функции внутри структуры dplyr summarise_all в столбцы в таблице результатов - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь выяснить, как экспортировать не 1, а 2 значения, вычисленные внутри функции, используемой внутри summarise_all

library(tidyr)
library(dplyr)
library(data.table)
library(diptest)

funx <- function(x) {
  logtest <- suppressWarnings(log10(x))
  remaining <- length(logtest[which(!is.na(logtest) & is.finite(logtest))])
  x <- if(remaining > 0.75*length(x)) {suppressWarnings(log10(x)) } else { x }
  logchoice <- if(remaining > 0.75*length(x)) {'Y' } else { 'N' }
  x <- x[which(!is.na(x) & is.finite(x))]
  y <- diptest::dip.test(x[1:7200])
  z <- y$p.value

  # z <- list(pvalue = y$p.value, transform = logchoice) ## attempt at exporting 2 values from the function
  return(z)
  }

, так далеко я дошел до этого в моем эксперименте:

mtcars %>% sample_n(30) %>%
select(colnames(mtcars)[2:5]) %>%
summarise_all(list(~ list(funx(.)))) %>% gather %>% separate(value, c('pvalue', 'trans'), ',')

, что дает мне это:

   key                             pvalue             trans
1  cyl list(pvalue = 6.20997213685026e-06  transform = "T")
2 disp     list(pvalue = 0.14200504058625  transform = "T")
3   hp   list(pvalue = 0.0549071023871164  transform = "T")
4 drat   list(pvalue = 0.0138972262215915  transform = "T")

или это, если я не называю элементы списка:

   key                   pvalue trans
1  cyl                   list(0  "T")
2 disp   list(0.112335716284263  "T")
3   hp  list(0.0425200071960111  "T")
4 drat list(0.00752301601012173  "T")

, поэтому у меня такое чувство, что я идуна это неправильный путь.

1 Ответ

0 голосов
/ 13 мая 2019
mtcars %>% 
sample_n(30) %>%
select(colnames(mtcars)[2:5]) %>%
summarise_all(list(~ list(funx(.)))) %>% 
gather %>% 
unnest 

дал мне то, что мне нужно:

  Parameter     pvalue Transform
1       cyl 0.00000000         T
2      disp 0.03095694         T
3        hp 0.08493466         T
4      drat 0.11180833         T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...