我的目标是使用此起始索引列表生成索引序列列表,如下所示:
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 元素)列表。看来我的问题不是将正确的参数传递给,但是我打算在每个子列表上对其进行矢量化,以便从每个值生成一个序列。funs
for
from
seq
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)