找不到在for each循环中声明的函数
我正在编写一个Rscript,用于为成对交易执行Jtst。我首先声明了一个函数以找出两个单一股票之间的相关性,然后我添加了一个for each循环来执行股票列表的任务。但是for each循环无法识别第一个函数 我曾尝试使用互联网上的信息建议的doSHOW功能,但它不起作用找不到在for each循环中声明的函数,r,trading,R,Trading,我正在编写一个Rscript,用于为成对交易执行Jtst。我首先声明了一个函数以找出两个单一股票之间的相关性,然后我添加了一个for each循环来执行股票列表的任务。但是for each循环无法识别第一个函数 我曾尝试使用互联网上的信息建议的doSHOW功能,但它不起作用 pkgs <- list("quantmod", "doParallel", "foreach", "urca") lapply(pkgs, require, character.only = T) register
pkgs <- list("quantmod", "doParallel", "foreach", "urca")
lapply(pkgs, require, character.only = T)
registerDoParallel(cores = 4)
jtest <- function(t1, t2) {
start <- sd
getSymbols(t1, from = start)
getSymbols(t2, from = start)
j <- summary(ca.jo(cbind(get(t1)[, 6], get(t2)[, 6])))
r <- data.frame(stock1 = t1, stock2 = t2, stat = j@teststat[2])
r[, c("pct10", "pct5", "pct1")] <- j@cval[2, ]
return(r)
}
pair <- function(lst) {
d2 <- data.frame(t(combn(lst, 2)))
stat <- foreach(i = 1:nrow(d2), .combine = rbind) %dopar% jtest(as.character(d2[i, 1]), as.character(d2[i, 2]))
stat <- stat[order(-stat$stat), ]
rownames(stat) <- NULL
return(stat)
}
sd <- "2018-01-01"
tickers <- c("FITB", "BBT", "MTB", "STI", "PNC", "HBAN", "CMA", "USB", "KEY", "JPM", "C", "BAC", "WFC")
pair(tickers)
pkgs在我在foreach调用中指定了必要的函数之前,我也遇到了同样的问题。该函数用于生成时间序列变量的滞后
此版本不起作用:
Ylag = foreach(i = 1:maxlagsY,.combine = 'cbind') %dopar%{mylag(Y,k = i)}
而这一个是:
Ylag = foreach(i = 1:maxlagsY,.export = "mylag",.combine = 'cbind') %dopar%{mylag(Y,k = i)}
因此,答案是在foreach调用中指定用户定义的函数。.export=“jtest”
我刚刚添加时,有人能帮忙吗?@Roland。export=“jtest”在每个函数的{stat请阅读foreach文档:您需要将包加载到工人身上。您需要导出变量sd
和tickers
,以及罗兰已经指出的内容。您必须明确地向每个核心提供要执行任务的所有信息(全局变量、包、函数等)。