Нет применимого метода для 'mutate_', примененного к объекту класса "логический" - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть список тикеров акций в векторной форме:

> MSCI_USA
  [1] "SLB"   "NOV"   "BKR"   "HAL"   "XOM"   "VLO"   "OXY"   "WMB" 
  [9] "PXD"   "OKE"   "CVX"   "MRO"   "TRGP"  "HES"   "FANG"  "COP"
  .
  .
  .
  [681] "JLL"   "CBRE" 

И я создал функцию для чтения тикеров, загрузки их акций и изменения символов в кадре данных:

get_prices = function(ticker){
  df = tq_get(ticker, from = date) %>% mutate(symbol = rep(ticker, length(date)))
}

Наконец, функция map() используется для итерации по элементам в MSCI_USA, чтобы получить их цены акций и связать результирующий кадр данных для каждой акции в одном отдельном кадре данных, используя bind_rows():

tickers_df = map(MSCI_USA, get_prices) %>% bind_rows()

Проблема:

R вернул ошибку:

Error in UseMethod("mutate_") : 
  no applicable method for 'mutate_' applied to an object of class "logical"

Я не уверен, что означала ошибка, и мне нужна помощь для ее устранения. Заранее спасибо!

1 Ответ

1 голос
/ 13 февраля 2020

Одна проблема в том, что ваш пример не очень воспроизводимый . Сначала я дам код для воспроизведения подмножества данных вашего примера

MSCI_USA <- c("SLB", "NOV", "BKR", "HAL")

Затем у вашей функции get_prices возникнут проблемы, поскольку date не определено. Я добавлю аргумент даты.

get_prices = function(ticker, date){
  df = tidyquant::tq_get(ticker, from = date) %>% dplyr::mutate(symbol = rep(ticker, length(date)))
}

С этим ваш код работает для меня

tickers_df <- purrr::map(MSCI_USA, get_prices, "2020-02-10") %>% dplyr::bind_rows()

tickers_df
#> # A tibble: 12 x 8
#>    date        open  high   low close   volume adjusted symbol
#>    <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl> <chr> 
#>  1 2020-02-10  34.1  34.4  33.8  34.3  7197400     33.8 SLB   
#>  2 2020-02-11  34.2  34.3  33.9  34.3  8825600     34.3 SLB   
#>  3 2020-02-12  35.2  35.4  34.4  35.0  9093400     35.0 SLB   
#>  4 2020-02-10  24.0  24.0  22.7  22.9  4214600     22.9 NOV   
#>  5 2020-02-11  23.4  23.5  22.9  23.3  3094300     23.3 NOV   
#>  6 2020-02-12  23.9  24.2  23.6  23.9  2704800     23.9 NOV   
#>  7 2020-02-10  22.3  22.4  22.0  22.2  3184000     22.2 BKR   
#>  8 2020-02-11  22.5  22.6  22.1  22.1  4126700     22.1 BKR   
#>  9 2020-02-12  22.4  22.6  21.9  22.2  6025000     22.2 BKR   
#> 10 2020-02-10  21.5  21.6  21.3  21.4 10099000     21.4 HAL   
#> 11 2020-02-11  21.8  21.9  21.5  21.7 12984000     21.7 HAL   
#> 12 2020-02-12  22.3  22.6  21.9  22.4  9892400     22.4 HAL

Хотя его можно упростить до

tickers_df <- purrr::map_df(MSCI_USA, get_prices, "2020-02-10")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...