0

私の目標は、この開始インデックスのリストを次のように使用して、インデックス シーケンスのリストを生成することです。

values <- matrix (1:25, nrow=5)
indexMatrix <- matrix (seq_along (values) , nrow=nrow(values))
fWidth <- 2
startIndices<- list (
  vert=indexMatrix [1:(nrow (values)-fWidth) , 1:ncol (values)],
  horiz=indexMatrix [1:nrow (values) , 1:(ncol (values)-fWidth)] ,
  upDiag=indexMatrix [fWidth:(nrow (values) - fWidth) , 1:(ncol (values) - fWidth) ] ,
  dnDiag=indexMatrix [1: (nrow (values) - fWidth) , 1: (ncol (values) - fWidth) ]
)

startIndicesこのコードを使用して、これらのサブセットを開始点として使用してシーケンスを生成しようとしています。これは、元のマトリックスのサブセットである各サブリストを介してメイン リストをステップスルーし、*x、x+fun のシーケンスを生成することを願っています。 x+2*fun, x+3*fun...* (the ) 部分、各サブリスト (これが部分)lapplyのリストとは異なる値を使用して、それらすべてを 1 つの大きなリストにマージします (inこの例では、3 要素) リストです。私の問題は に適切な引数を渡していないようですが、各値からシーケンスを生成するために、これを各サブリストでベクトル化することを意図していました。funsforfromseq

funs<-c(1 , nrow (values) , nrow (values) - 1 , nrow (values) + 1
    )
    #browser()
    seqs<- for (i in seq_along (startIndices)){
        unlist (
            lapply (startIndices [i] , 
            seq , by=funs[i] , to=fWidth*funs[i]) , #from=n from     indexMatrices[i]
        FALSE , FALSE
        )
    }

このコードにより、エラー メッセージが表示されますError in seq.default(X[[1L]], ...) : 'from' must be of length 1lapply関数の仕組みについて根本的な誤解をしているようです。提供された関数の引数のリストとして初期データセットを使用すると思っていましたが、リスト項目だけではなく、リスト全体を使用しているようです。これは、行列 ( n = ) 内のn 個の隣接するすべての値の積を計算する、より大きな関数の一部です。width

私の目的の出力は、次のようにシミュレートできます。

startIndices <- sapply (startIndices, as.vector)
attach (startIndices)
startIndices$vert <- matrix (c(vert, vert+1, vert+2), nrow=3, byrow=TRUE )
startIndices$horiz <- matrix (c(horiz, horiz+5, horiz+10), nrow=3, byrow=TRUE)
startIndices$upDiag <- matrix (c(upDiag, upDiag+4, upDiag+8), nrow=3, byrow=TRUE)
startIndices$dnDiag <- matrix (c(dnDiag, dnDiag+6, dnDiag+12), nrow=3, byrow=TRUE)

df <- lapply (startIndices, as.data.frame)
unlist (lapply (df, as.list), FALSE, FALSE)
4

1 に答える 1

0

あなたが何をしようとしているのかよくわかりませんが、簡単に見ると、両方lapply()seq()間違って使用しているようです。、、および または のいずれかをseq()指定する必要があるためです。さらに重要なことは、リストの単一の要素でを使用しているコードの記述方法のように思われることです。リスト全体を最初の引数としてフィードするか、内部でイテレータを参照する必要がある場合 (例では) 、次のように使用することを検討してください。fromtobylengthlapply()lapply()isapply()

 sapply(length(startIndices),function(i) {
        seq(from=?, to=fWidth*funs[i],by=funs[i]) 
 })
于 2013-08-26T04:20:57.930 に答える