Мы могли бы проверить структуру списка, а затем получить доступ к элементу списка по имени или индексу, например:
# example input
program1 <- list(list(id = 1, x = 3, works = list(1:3, list(ID = 11, 1:3, 4:6))),
list(id = 2, x = 4, works = list(4:6, list(ID = 22, 1:3, 4:6))))
# by index
program1[[ 1 ]][[ 3 ]][[ 2 ]][[ 1 ]]
# [1] 11
# by name
program1[[1]][["works"]][[ 2 ]][["ID"]]
# [1] 11
Если мы используем RStudio, то есть удобная опция «укажи и щелкни»чтобы получить элементы из списка:

Это обеспечит следующий код в консоли:
program1[[1]][["works"]][[2]][["ID"]]
Наконец, из вашего примерапохоже, что мы хотим извлечь все идентификаторы из всех 875 элементов списка, а затем использовать:
# get all IDs
sapply(program1, function(i) i[[ "works" ]][[ 2 ]][[ "ID"]])
# [1] 11 22