Трубопровод в rcorr - PullRequest
       0

Трубопровод в rcorr

0 голосов
/ 10 ноября 2018

Я пытаюсь запустить rcorr как часть функции на нескольких фреймах данных, извлекая p-значения для каждого теста, но получаю значения NA при передаче в rcorr.

Например, если я создаю матрицу и запускаю rcorr на этой матрице, извлекая таблицу значений pvalue с $P и значение pvalue с [2], это работает ...

library(Hmisc)
library(magrittr)

mt <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), ncol=2)
    rcorr(mt, type="pearson")$P[2]
    [1] 0

Но если я попытаюсь передать это, я получу только АН.

mt %>% rcorr(., type="pearson")$P[2]
[1] NA NA

mt %>% rcorr(., type="pearson")$P
Error in .$rcorr(., type = "pearson") : 
  3 arguments passed to '$' which requires 2

Может ли кто-нибудь объяснить мне, почему это не работает или дать обходной путь? В идеале я не хочу создавать переменные для каждой из моих матриц перед запуском rcorr

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 10 ноября 2018

Опрятное решение, по крайней мере, я надеюсь!

library(dplyr) 
library(broom) 
library(Hmisc) 

mtcars[, 5:6] %>%
as.matrix()%>%
rcorr()%>%
tidy() %>%
select(estimate) 
0 голосов
/ 10 ноября 2018

Простое решение с использованием %$% из magrittr :

library(Hmisc)
library(magrittr)
mt <- matrix(1:10, ncol=2)

mt %>% rcorr(type="pearson") %$% P[2]
[1] 0
0 голосов
/ 10 ноября 2018

Решение

(mt %>% mcor(type = "pearson"))$P[2]
# [1] 0

Объяснение

Обратите внимание, что оба

mt %>% rcorr(., type = "pearson")

и

mt %>% rcorr(type = "pearson")

работает как положено. Проблема в том, что вы добавляете $ и [ ко второму объекту, которые в основном похожи на последующие вызовы функций. Например,

s <- function(x) c(1, 1 + x)
1 %>% s
# [1] 1 2

работает как положено, но

1 %>% s[1]
# Error in .[s, 1] : incorrect number of dimensions

не возвращает 1, так как вместо этого мы пытаемся сделать что-то вроде s[1](1).

Теперь

1 %>% s(x = .)[1]
# Error in .[s(x = .), 1] : incorrect number of dimensions

так же, как ваш

mt %>% rcorr(., type = "pearson")$P[2]
# [1] NA NA

хитрее. Обратите внимание, что его можно переписать как

mt %>% `[`(`$`(rcorr(., type = "pearson"), "P"), 2)
# [1] NA NA

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

`[`(mt, `$`(rcorr(mt, type = "pearson"), "P"), 2)
# [1] NA NA

, который при расшифровке равен

mt[rcorr(mt, type = "pearson")$P, 2]
# [1] NA NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...