Опираясь на ответ Джорана и уточняя его:
Оболочка sapply(USE.NAMES=T)
действительно установит в качестве имен конечного результата значения вектора, по которому вы перебираете (а не атрибута имён, например, lapply), , но только если это символы.
В результате прохождение индексов не поможет. Если вы хотите передать индексы с sapply
, вам нужно прибегнуть к некоторому (некрасивому) кастингу:
sapply(as.character(c(1,11)), function(i) TEST[[as.numeric(i)]], USE.NAMES = TRUE)
В этом случае более чистым решением является непосредственная установка и использование имен вашего исходного объекта. Вот исчерпывающий список решений:
TEST <- as.list(LETTERS[1:12])
### lapply ##
## Not working because no name attribute
lapply(c(1,11), function(i) TEST[[i]])
## working but cumbersome
index <- c(1,11)
names(index) <- index
lapply(index, function(i) TEST[[i]])
### sapply ##
## Not working because vector elements are not strings
sapply(c(1,11), function(i) TEST[[i]], simplify = F)
## Working with the casting trick
sapply(as.character(c(1,11)), function(i) TEST[[as.numeric(i)]], simplify = F)
## Cleaner, using names with sapply:
names(TEST) <- LETTERS[26:15]
sapply(names(TEST)[c(1,11)], function(name) TEST[[name]], simplify = F)