非标准评估设置名称 R



我试图重复调用一个函数(特别是Seurat::D imPlot),其中一个参数是一个命名列表(cells.highlight)。 我打算用purrr::imap来打电话。 我有一个命名列表,其中列表的每个元素都是字符向量。 我想为 Seurat::D imPlot 的 cells.highlight 参数创建列表。 当我尝试时

imap(mylist, ~ DimPlot(seurat_obj, cells.highlight=list(.y=.x), cols="lightgrey", 
cols.highlight="dodgerblue")  )

该图看起来不错,但它没有将变量 .y 替换为列表元素名称,而是将列表元素名称保留为".y"。 (所以在情节上我在图例中看到".y")。制作 SSCE 的步骤

dp <- function(name, values){
list(name = values)
}
dp("a",paste0("a",1:3))
# $name
# [1] "a1" "a2" "a3"

我想要它在哪里

$a
[1] "a1" "a2" "a3"`

我尝试使用enquo,as_name,使用":=",ensym,quote,但我似乎无法正确处理。 我知道你可以用 list[[name]]=...] 之类的东西把它分成两行,但由于这是一个更大问题的一部分,我很想学习如何适当地引用和取消引用变量名称。

我一直在使用 NSE 时遇到麻烦,即使在阅读、重读和重读 Hadley Wickhams 关于准引号的高级 R 章节和他关于评估的章节之后,但似乎所有部分都在那里,我只是无法将它们放在一起

既然你是 usinrpurrr你应该使用set_names来设置列表的名称

imap(mylist, ~ DimPlot(seurat_obj, cells.highlight=set_names(list(.x), .y), cols="lightgrey", 
cols.highlight="dodgerblue")  )

dp为例,它将是

dp <- function(name, values){
set_names(list(values), name)
}
dp("a",paste0("a",1:3))
# $`a`
# [1] "a1" "a2" "a3"

所以在这种情况下,这真的与非标准评估没有任何关系。这只是关于为工作使用正确的功能。

最新更新