R - 将组合函数的结果传递给双参数函数

Dou*_*ith 4 r

我有一个stock/etf符号的矢量,根据我的兴趣不同.

例如:

symbols_v <- c('UPRO','TLT','SPXU','TBT','DRN','URE','SOXL')
Run Code Online (Sandbox Code Playgroud)

我想使用组合规则,一次两个迭代向量,生成对.

例如:

p <- combn(symbols_v, 2)
Run Code Online (Sandbox Code Playgroud)

然后,来自p的每一对都应传递到(用户定义的)两个参数函数" f(x,y)",该函数将下载股票数据并执行相关和其他功能.

我的问题是:1)下面第2步中用于p的最佳数据结构是什么?2)给定数据结构p,解析它以将对提供给函数f的最简单方法是什么?

简介:如何获取combn()函数的结果并将每对传递给函数f(x,y)

我试图最小化循环,因为在R中被认为是"慢".

我可能遗漏了一些基本的东西,但我似乎无法完全理解它.

在提供答案的同时请随意侮辱我的智慧:)

Jos*_*ich 10

你可以使用以下FUN参数combn:

library(quantmod)  # for getSymbols
symbols_v <- c('UPRO','TLT','SPXU')  # shorter example
# simple function to download data and calculate correlation between close prices
f <- function(x) {
  x1 <- getSymbols(x[1], auto.assign=FALSE)
  x2 <- getSymbols(x[2], auto.assign=FALSE)
  y <- merge(Cl(x1),Cl(x2))
  cor(y[,1],y[,2],use="complete.obs")
}
# run 'f' on each pair 
p <- combn(symbols_v, 2, FUN=f, simplify=FALSE)

[[1]]
            TLT.Close
UPRO.Close -0.6394617

[[2]]
           SPXU.Close
UPRO.Close  0.0947242

[[3]]
           SPXU.Close
TLT.Close -0.06216682
Run Code Online (Sandbox Code Playgroud)