大廈joran的答案,precising它:
的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)
沒錯,這工作。我仍然需要通過n =個名稱(myList)創建'n'。兩次調用名字(myList),一次創建n,第二次設置n個屬性。 – 2012-02-27 18:31:05
雖然你可以用'names(n)< - n'代替第二個。 – Aaron 2012-02-27 18:43:39
@RobertKubrick看到我的編輯可能更好的解決方案。檢查'sapply'的代碼,看看這是多麼簡單;它只是作爲一個包裝,在事後添加名稱。 – joran 2012-02-27 18:51:55