(編集注:ソリューションをより適切に反映するために、タイトルを「R:行列の列の組み合わせを列挙する」から「Rgrep:文字列の行列をリストに一致させる」に変更しました)
文字列の行列をリストに一致させようとしています。これにより、後の操作で最終的に行列をマップとして使用できるようになりdata.frame
ます。
この最初の部分は意図したとおりに機能し、可能なすべてのペア、トリプル、およびクワッドの組み合わせのリストを返します(おそらく、このアプローチによってバインドが作成されましたか?):
priceList <- data.frame(aaa = rnorm(100, 100, 10), bbb = rnorm(100, 100, 10),
ccc = rnorm(100, 100, 10), ddd = rnorm(100, 100, 10),
eee = rnorm(100, 100, 10), fff = rnorm(100, 100, 10),
ggg = rnorm(100, 100, 10))
getTrades <- function(dd, Maxleg=3)
{
nodes <- colnames(dd)
tradeList <- list()
for (i in 2:Maxleg){
tradeLeg <- paste0('legs',i)
tradeList[[tradeLeg]] <- combn(nodes, i)
}
return(tradeList)
}
tradeCombos <- getTrades(priceList, 4)
ここで、この可能な組み合わせのリストをトレードに変えたいと思います。例えば:
> tradeCombos[[1]][,1]
[1] "aaa" "bbb"
最終的には、などになる必要がpriceList[,2] - priceList[,1]
あります。
私は、および同様のコマンドを使用していくつかのアプローチを試しgrep
ましたが、次のことに近づいたと感じています。
LocList <- sapply(tradeCombos[[1]], regexpr, colnames(priceList))
ただし、この形式は次のステップにはあまり適していません。
理想的には、LocList[1]
次のようなものを返します。1 2
と仮定しtradeCombos[[1]][,1] == "aaa" "bbb"
ます。
誰か助けてもらえますか?
__
以下のすべての答えの助けを借りて、私は今持っています:
colDiff <- function(x)
{
Reduce('-', rev(x))
}
getTrades <- function(dd, Maxleg=3)
{
tradeList <- list()
for (i in 2:Maxleg){
tradeLeg <- paste0('legs',i)
tradeLegsList <- combn(names(dd), i,
function(x) dd[x], simplify = FALSE)
nameMtx <- combn(names(dd), i)
names(tradeLegsList) <- apply(nameMtx, MARGIN=2,
FUN=function(x) paste(rev(x), collapse='*'))
tradeList[[tradeLeg]] <- lapply(tradeLegsList, colDiff)
}
return(tradeList)
}
tradeCombos <- getTrades(priceList, 4)
これは構成部品の名前を保持し、私が達成しようとしていたすべてです。
助けてくれたすべての人に感謝します。