Я пытаюсь войти в функциональное программирование, которое я могу заставить работать с простым одномерным списком, но если я пытаюсь упаковать список с объектами, он начинает ломаться. Часть программы использует запись в файл с помощью dput, и мне не удалось заставить dput работать внутри первого вызова функции, поэтому я создал еще одну функцию для обработки вызова dput (put_symbols_into_file).
У меня был проблема с dput в моей функции batch_get_symbols, поэтому я подумал, что просто вложу ее, которая работает сама по себе, но я бы хотел создать несколько рынков (облигации, акции, паевые инвестиционные фонды) в виде списков параметров и запускать их без проблем.
Полагаю, если бы я мог разместить параметр fil в dput в batch_get_symbols (например, с%>%), я бы подошел к go, но мне бы очень хотелось узнать, как сделать это как вложенный функция для будущего вложения. Если есть способ сделать это с помощью конструктора классов (я еще не делал классов), то это было бы хорошо. Я нахожу классы чтения в R немного запутанными.
Я знаю, что проблема в области видимости (то есть не распознает элемент данных). Первая функция вызывает вторую, а вторая функция по какой-то причине не знает, что такое термины параметров.
library(HelpersMG)
library(BatchGetSymbols)
library(future)
library(data.table)
library(quantmod)
BetaTestCoefficient = .25
wget("ftp://ftp.nasdaqtrader.com/SymbolDirectory/nasdaqtraded.txt")
wget("ftp://ftp.nasdaqtrader.com/SymbolDirectory/mfundslist.txt")
#9 quarters is 5479/8897 61% (60%)
nasdaqTraded <- as.character(head(read.csv("nasdaqtraded.txt",sep="|")$Symbol,-2))
mfunds <- as.character(head(read.csv("nasdaqtraded.txt",sep="|")$Symbol,-2))
put_symbols_into_file <- function(fil,data,size) {
dput(batch_get_symbols(data,size),fil)
}
batch_get_symbols <- function(data,size) {
BatchGetSymbols(tickers = sample(data,size*betaTestCoefficient),
do.parallel = TRUE,
first.date = first.date,
last.date = last.date,
be.quiet = TRUE,
#cache results in "can only subtract from "Date" objects"
#probably due to parallel
do.cache=FALSE)
}
fil_Nasdaq <- c()
fil_Nasdaq <- tempfile()
#mfunds
fil_mfunds <- c()
fil_mfunds <- tempfile()
first.date <- Sys.Date() - 821
last.date <- Sys.Date() - 814
list_nasdaq <- list(fil_Nasdaq,nasdaqTraded,770)
list_mfunds <- list(fil_mfunds,mfunds,324)
mylists <- list(list_nasdaq, list_mfunds)
lapply(mylists, sapply, put_symbols_into_file)
#Or...
lapply(mylists,put_symbols_into_file)
Ошибка
lapply(mylists,put_symbols_into_file)
Error in batch_get_symbols(data, size) :
argument "data" is missing, with no default
это работает, однако показывает, что вложенность немного работает, но он не будет работать с lapply
put_symbols_into_file(fil_Nasdaq,nasdaqTraded,770)
Примечание: мне пришлось сделать as.character (), иначе, когда я создавал свои списки, значения (имена символов) были конвертированы в целое число