以joran的回答为基础,并对其进行精确化:
包装器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)