【问题标题】:Cannot find a function declared inside a for each loop找不到在 for 每个循环中声明的函数
【发布时间】:2019-10-19 01:58:39
【问题描述】:

我正在编写一个 Rscript 来执行 Jtst 以进行配对交易。我首先声明了一个函数来找出两只单只股票之间的相关性,然后我添加了一个 for each 循环来执行股票列表的任务.然而,for each 循环没有识别第一个函数。

我按照网上资料的建议尝试使用doSHOW功能,但没有成功。


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)

jtest(as.character(d2[i, 1]), as.character(d2[i, 2])) 中的错误: 任务 1 失败 - “找不到函数“jtest””

【问题讨论】:

  • .export = "jtest"
  • 谁能帮忙?
  • @Roland 当我添加 . export = "jtest" 对于每个函数 {stat
  • 请阅读 foreach 文档:rdocumentation.org/packages/foreach/versions/1.4.4/topics/… 您需要将包加载到工人身上。
  • 您需要导出变量sdtickers 以及Roland 已经指出的内容。您必须明确地向每个核心提供要执行的任务的所有信息(全局变量、包、函数等)。

标签: r trading


【解决方案1】:

在我在 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 调用中指定用户定义的函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-11
    • 2021-03-13
    • 1970-01-01
    • 2019-03-23
    • 2020-08-04
    • 2015-10-24
    • 1970-01-01
    • 2012-09-27
    相关资源
    最近更新 更多