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使用列表中的不同值,并将它们全部合并到一个大列表中(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 1. 我似乎对该lapply功能的工作原理有一些基本的误解。我原以为它会使用我的初始数据集作为所提供函数的参数列表,但它似乎不仅仅使用列表项,而是使用整个列表。这是计算矩阵 ( 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()您需要提供from,tobylength。更重要的是,现在编写代码的方式似乎是lapply()在列表的单个元素上使用。您应该尝试将整个列表作为第一个参数提供,lapply()或者如果您需要在内部引用迭代器(i在您的示例中),请考虑使用sapply()如下:

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