Моя цель заключается в создании списка индексных последовательностей, используя этот список исходных индексов следующим образом:генерации последовательностей, используя список «из» значений
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 ... * (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)
Пожалуйста, создайте воспроизводимый пример 'indexMatrix' и' fWidth' не определены здесь – mnel
Eee! Сожалею. Я хотел просто включить часть кода, с которым у меня возникли проблемы, чтобы не поднимать более одного вопроса, но пренебрегали переопределением переменных, определенных в этой функции. Я добавил требуемые значения и в полный код для функции, над которой я работаю. Спасибо, что терпеливы со мной; Я очень надеялся, что не буду этим парнем. – mnosefish
Поскольку вы никогда не говорите, что хотите, и полагайтесь вместо этого на ошибочный код, вы зависите от наших способностей, связанных с интуицией ошибок. Сейчас мой интуитив-фу слабый. Я предполагаю, что вы хотите использовать «mapply», поскольку, похоже, вы можете установить объект startIndices с 4 подстроками с равной длиной. Если вы действительно хотите обработать только один из списков startIndices за раз, тогда просто игнорируйте догадку и редактируйте свой вопрос, чтобы прояснить цели. –