Ошибка в library rusquant нет пакета под названием rusquant

На r-forge главная версия пакета. Одно время авторы стали редко ее обновлять, и там была одна проблемка с обновлением списка тикеров, если источник данных mfd.ru. У меня форкнутая версия, где эта проблема решена.

Если поставился из r-forge, то должно работать.
Попробуй запустить:
library(rusquant)
getSymbols("SiH6 (03.2016)",from="2016-02-10",period="1min", src="mfd",auto.assign = FALSE)

Пока тут бился с алготорговлей, параллельно дописал библиотеку для R, которая уже больше 12 лет пылилась
на разных репозиториях.

Многим было не удобно ее использовать,  но не смотря ни на что народ ей пользовался и благодарил на конференциях за поддержку этой библиотеки.

Теперь же можно наслаждаться нормальным доступ к данным из
Финам, Алор, Мосбиржа, Mfd, Тинькофф, MarketWatch. Добавил в нее и возможности торговать через API брокеров: Финам, Алор, Тинькофф.

Теперь можно устанавливать и наслаждаться как обычными библиотеками:

install.packages(«rusquant»)
library(rusquant)

fn601196

 


#1
Оставлено
:

6 июля 2018 г. 23:16:39(UTC)

fn601196

Статус: Посетитель

Группы: Участник

Зарегистрирован: 15.12.2017(UTC)
Сообщений: 2

Добрый день. Посоветуйте, пожалуйста, как могу решить следующую проблему.

Раньше (в начале года) выкачивал историю цен на ETF с Финама с помощью такого кода в R.

Код:


library(quantmod)
library(xts)
library(zoo)
library(rusquant)
library(TTR)

etf_env <- new.env()
start_date = as.Date("2017-06-01")
end_date = Sys.Date()-1

available_etf_list = c("FXMM", "FXCN", "FXIT", "FXJP", "FXDE", "FXUS", "FXAU", "FXUK", "FXRB", "FXRL", "FXRU")

setDefaults(getSymbols, env = etf_env, src = "Finam")
setDefaults(getSymbols.Finam, env = etf_env, from = start_date, to = end_date, period = "day")

getSymbols(available_etf_list, auto.assign = TRUE)

И вот раньше после этого получалась Environment с историей цен на каждый из инструментов. А теперь получаю только истории первых трех инструментов. И ошибку:

Код:


Error in download.file(stock.URL, destfile = tmp, quiet = !verbose) : 
  cannot open URL 'http://export.finam.ru/table.csv?d=d&market=1&f=table&e=.csv&dtf=1&tmf=1&MSOR=0&sep=1&sep2=1&at=1&p=8&em=181751&df=1&mf=5&yf=2017&dt=5&mt=6&yt=2018&cn=FXJP&datf=1'
In addition: Warning message:
In download.file(stock.URL, destfile = tmp, quiet = !verbose) :
  cannot open URL 'http://export.finam.ru/table.csv?d=d&market=1&f=table&e=.csv&dtf=1&tmf=1&MSOR=0&sep=1&sep2=1&at=1&p=8&em=181751&df=1&mf=5&yf=2017&dt=5&mt=6&yt=2018&cn=FXJP&datf=1': HTTP status was '403 Forbidden'

При этом, если копирую адрес, который не удалось скачать R, в браузер — файл скачивается. Вероятно, Финам стал ограничивать выдачу на автоматические запросы? Хотя quantmod должен по умолчанию делать паузы, чтобы не перегрузать сервер…

Посоветуйте, пожалуйста, как мне исправить эту ошибку и получить все истории.

Заранее большое спасибо!

Получается вот так

    > getSymbols.Finam(Symbols = 'MICEXM&M',  verbose = FALSE,  warnings = TRUE, auto.assign = TRUE, from = "2016-01-01") 
 Ошибка в `[.data.frame`(fr, , (5:9)) :undefined columns selected
> traceback()
7: stop("undefined columns selected")
6: `[.data.frame`(fr, , (5:9))
5: fr[, (5:9)]
4: as.matrix(fr[, (5:9)])
3: apply(as.matrix(fr[, (5:9)]), 2, as.numeric)
2: xts(apply(as.matrix(fr[, (5:9)]), 2, as.numeric),     as.Date(strptime(fr[, 
   3], "%Y%m%d")), src = "finam", updated = Sys.time())
1: getSymbols.Finam(Symbols = "MICEXM&M", verbose = FALSE, warnings = TRUE, 
   auto.assign = TRUE, from = "2016-01-01")

Включаем отладку

> getSymbols.Finam(Symbols = 'MICEXM&M',  verbose = TRUE,  warnings = TRUE, auto.assign = TRUE, from = "2016-01-01")
downloading  MICEXM&M .....

/table.csv?d=d&market=1&f=table&e=.csv&dtf=1&tmf=1&MSOR=0&sep=1&sep2=1&at=1&p=8&em=18886&df=1&mf=0&yf=2016&dt=18&mt=10&yt=2016&cn=MICEXM&Mпробую URL 'http://export.finam.ru/table.csv?d=d&market=1&f=table&e=.csv&dtf=1&tmf=1&MSOR=0&sep=1&sep2=1&at=1&p=8&em=18886&df=1&mf=0&yf=2016&dt=18&mt=10&yt=2016&cn=MICEXM&M&datf=1'
Content type 'finam/expotfile' length unknown
.......... .......
downloaded 17 KB

done.
Ошибка в `[.data.frame`(fr, , (5:9)) :undefined columns selected

Обращаясь по созданному url действительно получаем файл _без_наименований показателей (пустая первая строка) с 7 колонками

20160104,000000,3775.4600000,3780.5300000,3732.3100000,3732.9500000,1790746616
20160105,000000,3723.6200000,3793.4300000,3718.2100000,3793.4300000,2108887779
20160106,000000,3786.8100000,3829.9700000,3782.0200000,3818.0500000,3002195690
-----8<-----

«Больное место» это указание в конце url необязательного «cn=MICEXM&M»

По идее это должно «лечиться» указанием альяса для имени, поскольку есть строчка в коде getSymbols.Finam

Symbols.name <- getSymbolLookup()[[Symbols[[i]]]]$name

То есть предполагается что то такое:

 setSymbolLookup(QQQQ='yahoo',DIA='MySQL')

PS Если конечно я не запутался в логике использования псевдонимов. Их вполне логично выводить вместо оригиналов в качестве меток…. На худой конец просто выкинув это имя, в скачиваемом файле остаётся как имя индикатора индеферентное «table»

Я хочу запускать файлы R в пакетном режиме с помощью Rscript, однако, похоже, он не загружает нужные мне библиотеки. Конкретная ошибка, которую я получаю:

Error in library(timeSeries) : there is no package called 'timeSeries'
Execution halted

Однако у меня есть пакет timeSeries, и я без проблем могу загрузить его из Rstudio, RGui и R из командной строки. Проблема, похоже, возникает только при запуске сценария с использованием Rscript.

Мои переменные системы / среды настроены как:

C:Program FilesRR-3.1.0binx64 (Appended to PATH)
R_HOME = C:Program FilesRR-3.1.0
R_User = Patrick

Я запускаю ту же версию R в RStudio, RGui и R из командной строки. Я также проверил .Library из этих трех источников и получил такой же результат.

Как я могу запустить Rscript из командной строки с пакетами, которые я использую (и установил) в R?

РЕДАКТИРОВАТЬ:

Я использую Rscript через Rscript script.r в командной строке Windows в каталоге, где находится script.r.

Результатом Rscript -e print(.Library) будет [1] "C:/PROGRA~1/R/R-31~1.0/library"

Что согласуется с тремя другими вариантами, которые я упомянул: [1] "C:/PROGRA~1/R/R-31~1.0/library"

Однако, если я вставлю это в свой сценарий:

print(.libPaths()) 
library(timeSeries) #This is the package that failed to load

Я получаю на выходе:

[1] "C:/Program Files/R/R-3.1.0/library"
Error in library(timeSeries) : there is no package called 'timeSeries'
Execution halted

Соответствующий вызов в RStudio дает дополнительный путь к месту, где фактически установлен пакет:

> print(.libPaths())
[1] "C:/Users/Patrick/Documents/R/win-library/3.1" "C:/Program Files/R/R-3.1.0/library"    

  

5 ответов

Лучший ответ

Короче говоря, значение, возвращаемое при вызове Sys.getenv('R_LIBS_USER') в R.exe, должно быть таким же, как значение, возвращаемое при вызове этого в командной строке:

Rscript.exe -e "Sys.getenv('R_LIBS_USER')"

и указанное выше значение необходимо включить в этот вызов командной строки:

Rscript.exe -e ".libPaths()"

Обратите внимание, что значения R_LIBS_USER могут отличаться между R.exe и Rscript.exe, если значение R_USER изменяется либо в .Rprofile или в целевом поле ярлыка пользователя на R.exe, и в целом я обнаружил, что пользовательская библиотека (т.е. .libPaths()[2]) просто не установлена ​​в Rscript.exe

Поскольку мне нравится устанавливать R_USER на свой USERPROFILE, я включаю следующий блок в начало файлов .R, которые я хочу запустить на нескольких компьютерах или в Rscript.exe { {X3}} (т.е. Rscript -e "path.expand('~/.Rprofile')"):

# =====================================================================
# For compatibility with Rscript.exe: 
# =====================================================================
if(length(.libPaths()) == 1){
    # We're in Rscript.exe
    possible_lib_paths <- file.path(Sys.getenv(c('USERPROFILE','R_USER')),
                                    "R","win-library",
                                    paste(R.version$major,
                                             substr(R.version$minor,1,1),
                                             sep='.'))
    indx <- which(file.exists(possible_lib_paths))
    if(length(indx)){
       .libPaths(possible_lib_paths[indx[1]])
    }
    # CLEAN UP
    rm(indx,possible_lib_paths)
}
# =====================================================================


10

Community
23 Май 2017 в 14:47

Как упоминалось в комментариях, кажется, что Rscript не распознает значения по умолчанию для пути к библиотеке автоматически. Я пишу сценарий R, который должен быть доступен из командной строки на компьютерах разных людей, поэтому я придумал этот более общий обходной путь:

  • Сначала сохраните путь к библиотеке по умолчанию в переменной (функции из Rscript могут найти это, но они просто не работают автоматически)
  • Затем включите этот путь в вызов library() с аргументом lib.loc =.
  • Это должно работать независимо от того, какой путь находится на данном компьютере.

    library.path <- .libPaths()
    library("timeseries", lib.loc = library.path)
    

Еще раз спасибо @flodel выше за то, что направили меня на правильный путь


7

rrr
31 Окт 2017 в 22:00

Этот ответ не поможет исходному пользователю (pbreach), но он может помочь кому-то еще, кто наткнется на этот вопрос и имеет аналогичную проблему со мной.

У меня много файлов сценариев bash .sh, которые вызывают RScript для выполнения файлов .R. Моя операционная система — Windows 10, и я выполняю эти bash файлы с помощью cygwin.

Все работало нормально до вчерашнего дня, когда я наконец обновил свой R с Revolution R 8.0.1 beta до Microsoft R Open 3.4.1. После этого обновления все сценарии bash, которые вызывали RScript, терпели неудачу по той же причине, которая указана здесь (например, Error in library(zoo) : there is no package called 'zoo').

Расследование показало, что RScript действительно работает нормально, если вызывается из DOS shell, а не из оболочки cygwin bash.

Например, если я выполню это в DOS shell

C:Progra~1MicrosoftROpen~1R-3.4.1binx64Rscript.exe -e ".libPaths()"

Я вижу выход

[1] "C:/Users/HaroldFinch/Documents/R/win-library/3.4"
[2] "C:/Program Files/Microsoft/R Open/R-3.4.1/library"

В конце концов я обнаружил причину. Как объяснено в R FAQ, чтобы определить свой домашний каталог, R сначала будет использовать переменную среды R_USER, если она определена, иначе он будет использовать переменную среды HOME, если она определена, иначе она будет использовать «личный» каталог Windows.

Моя конфигурация Windows не определяет ни R_USER, ни HOME переменных среды. Итак, в случае DOS shell R использует мой «личный» каталог Windows (C:/Users/HaroldFinch/Documents). Это хорошо, потому что там установлены все мои библиотеки (C:/Users/HaroldFinch/Documents/R/win-library/3.4).

Напротив, cygwin определяет и экспортирует переменную среды HOME, которая указывает на мой пользовательский каталог cygwin, в котором отсутствуют какие-либо элементы R. Следовательно, RScript, вызванный из cygwin, имел неправильный домашний каталог R, и поэтому не смог загрузить библиотеки.

Вероятно, есть много способов решить эту проблему. Я решил, что в моем сценарии bash будет установлена ​​переменная среды R_USER, которая указывает на мой пользовательский каталог Windows.

Например, если я выполняю это в cygwin bash shell:

R_USER="C:/Users/HaroldFinch/Documents"
export R_USER
/cygdrive/c/Progra~1/Microsoft/ROpen~1/R-3.4.1/bin/x64/Rscript.exe -e ".libPaths()"

Я вижу выход

[1] "C:/Users/HaroldFinch/Documents/R/win-library/3.4"
[2] "C:/Program Files/Microsoft/R Open/R-3.4.1/library"

Который теперь точно такой же, как и в примере оболочки DOS, приведенном выше.


4

HaroldFinch
26 Окт 2017 в 23:41

Другая причина — пакрат. Если вы работаете с packrat, RStudio включает его, когда вы открываете проект. RScript этого не делает, поэтому вам понадобится packrat::on() в начале вашего скрипта (до вызова библиотеки).


0

Dov Rosenberg
6 Сен 2019 в 20:17

Как уже отмечали другие, проблема в том, что Rscript.exe не может распознать папку win-library. Самым простым решением для меня было явно указать путь к папке библиотеки, добавив:

.libPaths("C:/Users/Benutzer1/Documents/R/win-library/4.0")

В мою программу. Затем он загружает все пакеты из папки win-library и по-прежнему может загружать пакеты из папки стандартной библиотеки.


0

Jens
2 Янв 2021 в 23:28

Понравилась статья? Поделить с друзьями:
  • Ошибка в library dplyr нет пакета под названием dplyr
  • Ошибка в call of duty server
  • Ошибка в call of duty buddha dll
  • Ошибка в call of duty advanced warfare вопросы
  • Ошибка в cabd смотри cabi err и error log