purrr :: map_if Как вернуть значение, если условие FALSE? - PullRequest
0 голосов
/ 25 февраля 2019

Я использую функцию, использующую purrr::map, которая выдаст ошибку, если информационный кадр не содержит числовых данных (т. Е. Na.omit не возвращает никаких допустимых строк).Я обнаружил map_if, но, похоже, map_if возвращает .x, если .p имеет значение false.Есть ли способ вернуть НА.Этот пример должен объяснить, что мне нужно:

library(openair)
library(tidyverse)

# Build test dataset
df1 <- mydata
df2 <- mydata
df2$no2 <- NA_real_
df3 <- mydata
dfx <- tibble(id = c(1, 2, 3), data = list(df1, df2, df3))

# polarPlot function will return error if dataframe does not contain numeric data (i.e., it only contains NAs)
polarPlot(df2, pollutant = "no2")

# Function to test length of dataframe (i.e., if 0 theneverything is NAs)
check_length <- function(x) (x %>% select(ws, wd, "no2") %>% na.omit() %>% nrow()) > 0
check_length(df1)
check_length(df2)

# purrr::map (is there a way for map_if to return NA if length == 0?) 
dfx %>% mutate(mynewvar = map_if(.x = data, check_length, ~ polarPlot(.x, pollutant = "no2")))

Другими словами, я бы хотел, чтобы mynewvar[[2]] вернул NA.

1 Ответ

0 голосов
/ 25 февраля 2019

@ dylanjm Я отправил репо, не уверен, что вы не можете его увидеть.Как вы предположили, мне нужна функция possibly.

possible_polarPlot <- possibly(polarPlot, otherwise = NA)
out <- dfx %>% mutate(mynewvar = map(.x = data, ~ possible_polarPlot(.x, pollutant = "no2")))
out$mynewvar[[2]] # Returns NA as I was looking for.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...