У меня есть набор числовых координат, представляющих начальную и конечную позиции вектора, которые необходимо проверить по таблице смежных областей, чтобы увидеть, в каких они присутствуют. Для каждой пары начальной и конечной позиций есть другая таблица регионов для проверки. Числовые координаты в настоящее время хранятся в паре одинаково индексированных векторов (так что начинается [1] пар с концов [1]), что будет проверено по таблице [[1]]. У меня уже есть это в цикле for, но мне интересно, есть ли более быстрый способ сделать это (возможно, с использованием некоторого члена семейства apply), учитывая, что индекс для векторов и элементов списка всегда одинаков.
Вероятно, это легче понять на примере:
starts <- c(7, 163); ends <- c(15, 165)
df1 <- data.frame(seq(from = 1, to = 91, by = 10),
seq(from = 10, to = 100, by = 10), paste0('Region', 1:10))
df2 <- data.frame(seq(from = 101, to = 191, by = 10),
seq(from = 110, to = 200, by = 10), paste0('Region', 1:10))
mylist <- list(df1, df2)
# With a for loop, I could iterate through as follows:
for (n in 1:length(starts)) {
regions <- which(starts[n] >= mylist[[n]][, 1] & starts[n] <= mylist[[n]][, 2]):which(ends[n] >= mylist[[n]][, 1] & ends[n] <= mylist[[n]][, 2])
print(mylist[[n]][regions, 3])
}
Несмотря на то, что вышеприведенное работает нормально, я буду запускать это потенциально десятки или сотни тысяч раз, поэтому я хотел бы избежать цикла for, если это возможно.
Возможно, я должен отметить, что (я не думаю) lapply
не будет работать с этим, потому что он будет проверять каждый векторный индекс по текущему списку и наоборот с 'apply'.
Я думаю, что я мог бы сохранить новый список с двумя начальными и конечными индексами и подкадрами данных, являющимися подсписками (т. Е. mylist <- list(list(starts[1], ends[1], df1), list(starts[2])...
), но мне интересно, есть ли что-нибудь чище?