我的目标是使用此起始索引列表生成索引序列列表,如下所示:
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
,这些子列表只是原始矩阵的子集,生成序列of * x,x + fun,x + 2 * fun,x + 3 * fun ... *(lapply
)部分,每个子列表使用列表funs
中的不同值(这是for
部分),并将它们全部合并到一个大型列表(在此示例中为3个元素)列表中。我的问题似乎没有向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)
答案 0 :(得分:0)
我不太明白你想要做什么,但从快速看看你似乎错误地使用了lapply()
和seq()
。对于seq()
,您需要提供from
,to
以及by
或length
。更重要的是,它似乎是代码编写的方式,现在您在列表的单个元素上使用lapply()
。您应该尝试将整个列表作为lapply()
的第一个参数提供,或者如果您需要引用内部的迭代器(在示例中为i
),请考虑使用sapply()
,如下所示:
sapply(length(startIndices),function(i) {
seq(from=?, to=fWidth*funs[i],by=funs[i])
})