Я работаю с некоторыми графоподобными данными, в основном собранными в векторах или списках.
Большую часть времени мне нужно проверять векторы / списки по заданным индексам и выполнять некоторую логику, чтобы определить результирующее значение для текущего элемента.
Чтобы быть более точным, рассмотрим такой фрагмент кода:
for (i in 1:(length1 - 1))
for (j in (i + 1):length2)
for (k in 1:length3) {
d1 <- data[i, k]
d2 <- data[j, k]
if (d1 != d2)
otherData[i, j, k] <- list(c(min(d1, d2), max(d1, d2)))
else
otherData[i, j, k] <- list(c(1, 1))
}
Мой вопрос:
- Было бы хорошим решением:
- создает векторы индексов, а затем
- легко внутренние функции (которые принимают вектор индексов), которые видят внешние (объявленные во внешней функции) объекты данных и используют предоставленный вектор индексов длявыполнить логику
Пример кода (проще, без связи с кодом выше):
someFunc <- function(data) {
n <- length(data)
f <- function(i) {
return (doSthWith(data[i], i))
# do some logic with both the data and the index
}
return (sapply(1:n, f))
}
Другое решение, которое я придумал, - создать data.frame и сделатьиндексирует часть данных, поэтому функции lapply в основном будут иметь индексы и во входной строке.
Я буду очень признателен за ваши мысли об этих подходах.