【发布时间】:2019-03-07 14:48:14
【问题描述】:
我有一个看似非常简单的任务,但无法弄清楚我做错了什么。我有一个包含字符向量和整数向量的 3 个 Xx2 小标题列表(在示例中为 2x2)。我想将其转换为 3 个命名向量的列表,其中字母是向量元素,数字是名称。这是我的方法:
tbl <- tibble(numbers=c(1:2), letters=letters[1:2])
vec_names <- c("name1", "name2", "name3")
lst <- list(tbl, tbl, tbl)
names(lst) <- vec_names
lst_n <- lapply(lst, function(x) x[["letters"]])
lst_n <- sapply(vec_names,
function(x) names(lst_n[[x]]) <- lst[[x]]$numbers)
我得到了这个结果
lst_n
name1 name2 name3
[1,] 1 1 1
[2,] 2 2 2
我看不出我的错误。 正在做
names(lst_n[["name1"]]) <- lst[["name1"]]$numbers
为我提供了我想要的“name1”,但为什么它不适用于 sapply?
我之前有 [] 并将其更改为 [[]] 以访问列表中的小标题而不是列表元素,但它仍然不起作用。任何人都可以帮忙吗?这似乎是一项非常基本的任务。
【问题讨论】:
-
sapply 尝试默认简化结果,如果你想要一个列表作为输出,只需使用 lapply。见this answer for more details on the apply family
-
Error in FUN(X[[i]], ...) : object 'lst_techkeys_batmob' not found -
Please make your example reproducible。这会让其他人更容易帮助你。
-
小提示,
lapply(lst, function(x) x[["letters"]])不需要匿名函数,只需lapply(lst, "[[", "letters")