Использование na.rm = T в pmin с do.call - PullRequest
0 голосов
/ 07 июня 2018

Я хочу извлечь минимальное значение каждого элемента из нескольких матриц, которые хранятся в списке.Я использую pmin:

do.call(pmin, mylist)

Проблема состоит в том, что некоторые элементы этой матрицы являются NA, а pmin выдает NA, где я хочу, чтобы он вывел минимальное значение после исключения NA.Я пытался решить мою проблему, используя do.call (pmin (na.rm = T), mylist)

, но я получаю ошибку.Я также попытался с этим ответом: data.table и pmin с аргументом na.rm = TRUE , но я получаю ошибку, потому что .SD не находится в среде.Простой код для подобной проблемы:

mymat1 <- matrix(rnorm(10), ncol=2)

mymat2 <- matrix(rnorm(10), ncol=2)
mymat2[2,2] <- NA

mymat3 <- matrix(rnorm(10), ncol=2)

mylist <- list(mymat1, mymat2, mymat3)

do.call(pmin, mylist)

Я получаю NA в позиции [2,2] полученной матрицы, и я хочу получить минимальные значения, игнорируя NA.Какие-либо предложения?Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

если вы используете purrr / tidyverse, вы можете использовать purrr::invoke.

library(purrr)
invoke(pmin,mylist,na.rm=TRUE)
#            [,1]       [,2]
# [1,] -0.3053884 -1.3770596
# [2,]  0.9189774 -0.4149946
# [3,] -0.1027877 -0.3942900
# [4,] -0.6212406 -1.4707524
# [5,] -2.2146999 -0.4781501

Это в основном do.call с аргументом ..., а его исходный код более или менее @ ответ Акруна:

function (.f, .x = NULL, ..., .env = NULL) 
{
  .env <- .env %||% parent.frame()
  args <- c(as.list(.x), list(...))
  do.call(.f, args, envir = .env)
}

purrr::partial также интересно:

pmin2 <- partial(pmin,na.rm=TRUE)
do.call(pmin2,mylist)
#            [,1]       [,2]
# [1,] -0.3053884 -1.3770596
# [2,]  0.9189774 -0.4149946
# [3,] -0.1027877 -0.3942900
# [4,] -0.6212406 -1.4707524
# [5,] -2.2146999 -0.4781501
0 голосов
/ 07 июня 2018

Объединить na.rm = TRUE как именованный элемент list, а затем использовать pmin с do.call, чтобы параметр na.rm был найден

do.call(pmin, c(mylist, list(na.rm = TRUE)))
#          [,1]       [,2]
#[1,] -1.0830716 -0.1237099
#[2,] -0.5949517 -3.7873790
#[3,] -2.1003236 -1.2565663
#[4,] -0.4500171 -1.0588205
#[5,] -1.0937602 -1.0537657
...