Как передать несколько именованных параметров в функцию с purrr? - PullRequest
0 голосов
/ 26 марта 2019

Я пытался соединить функцию канала с функцией normal и установить возвращаемое значение в новый столбец.То, что я пытаюсь сделать, это отправить функции параметры и затем продолжить операции цепочки

Это функция, которую я пытаюсь запустить с purrr :

fileDownloader<- function(url, path, log_attr){
    url <- as.character(url)
    path <- as.character(path)
    log_attr <- as.character(log_attr)
    res <- 0
    if (log_attr == "a"){
        text<-paste("Function invoked at ", as.character(Sys.time()), sep=" ")
        print(text)
        write.csv(text, file = "log.csv")
    }    

    if(!file.exists(path)){
        res <- tryCatch({                        
                        archivo <- curl_download(url=url, destfile=path)
                        res <-1
                    }
                    ,error=function(e){res <- -1}
                )
    }
    res
}

У меня есть этот фрейм данных, который я пытаюсь передать

my_dataframe <- data.frame(
    url=c("www.google.com", "yahoo.com", "bing.com", NA),
    file_name=c("mi_file1.txt", "mi_file2.txt", "mi_file3.txt", NA),
    attributes=c("a", "", "", NA),
    another_col=c("xxx", "yyy", "zzz", "111")
    )

Это фактический конвейер:

my_dataframe %>%
    filter(!is.na(url)) %>%
    # mutate(file_status = pmap(list(.$url, .$file_name, .$attributes), .f=fileDownloader) )
    # prints 212/321/131
    # mutate(file_status = map(.$url, path=.$file_name, log_attr=.$attributes, .f=fileDownloader))
    # works only with the first element

Мне удалось "заставить его работать" с {walk} но ничего не возвращает.

Кто-нибудь знает, что я делаю не так?

Спасибо

1 Ответ

0 голосов
/ 26 марта 2019

делает это за вас:

my_dataframe %>%
  filter(!is.na(url)) %>%
  mutate(file_status = pmap_chr(list(.$url, .$file_name, .$attributes), .f = fileDownloader))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...