将复制列表转换为r中的命名列表

时间:2018-03-19 17:16:57

标签: r

我手动创建命名列表,例如:

FD_OesophagitisIntro<-list(x="LA Grade A",
                      x="LA Grade B",
                      x="LA Grade C",
                      x="LA Grade D")

但这是重复的,因此更整洁的版本

FD_OesophagitisIntro<-list(unique(append(FD_OesophagitisIntro,replicate(4,paste("LA Grade ",sample(c("A","B","C","D"),replace=F))))))

然而,这会创建一个非命名列表。如何使用更简洁的代码

创建上面的列表

1 个答案:

答案 0 :(得分:1)

如果您的问题是如何使用replicate创建命名列表,则只有在表达式具有名称时才能执行此操作。

replicatesapply的包装器,表达式被评估为匿名函数,如下所示:

sapply(integer(4), function(...){
    paste("LA Grade ", sample(c("A", "B", "C", "D"), replace = F)
})

...没有replicate个参数,但幸运的是,sapply的{​​{1}}参数默认设置为USE.NAMES。因此,要从中获取名称,您需要TRUEX(它不是&#39; t "character"),或者返回值为{ {1}}有名字。它不是。它是对"integer"的调用的返回值,它在所有参数上调用expr,因此删除属性,包括名称。您可以在以下示例中看到:

paste()

这意味着您的解决方案将涉及将调用分离为as.character(),然后将名称分配给它返回的对象。可悲的是,它变成了一个带花括号的假单行,或者根本不是一个单行。

您还必须将paste(c(a = "x", b = "x"), c(a = "y", b = "y")) [1] "x y" "x y" 的产品作为列表传递给replicate,以便保留其名称,而不是使用replicate(因为它剥离名称。)

以下是一个例子:

append