非标准评估设置名称 R
Non standard evaluation setting names R
我试图重复调用一个函数(特别是 Seurat::DimPlot),其中一个参数是一个命名列表 (cells.highlight)。我打算使用 purrr::imap
来拨打电话。我有一个命名列表,其中列表的每个元素都是一个字符向量。我想为 Seurat::DimPlot 的 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]]=... 之类的东西把它分成两行,但因为这是一个更大问题的一部分,我很想学习如何适当地引用和取消引用变量名。
即使在阅读、重读和重读 Hadley Wickhams 的 Advanced-R chapter on quasiquotations and his chapter on evaluation 之后,我在使用 NSE 时一直遇到问题,但似乎所有的部分都在那里,我只是不能把它们放在一起
既然你在使用 purrr
你应该使用 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"
所以在这种情况下,这确实与非标准评估没有任何关系。这只是关于为工作使用正确的功能。
我试图重复调用一个函数(特别是 Seurat::DimPlot),其中一个参数是一个命名列表 (cells.highlight)。我打算使用 purrr::imap
来拨打电话。我有一个命名列表,其中列表的每个元素都是一个字符向量。我想为 Seurat::DimPlot 的 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]]=... 之类的东西把它分成两行,但因为这是一个更大问题的一部分,我很想学习如何适当地引用和取消引用变量名。
即使在阅读、重读和重读 Hadley Wickhams 的 Advanced-R chapter on quasiquotations and his chapter on evaluation 之后,我在使用 NSE 时一直遇到问题,但似乎所有的部分都在那里,我只是不能把它们放在一起
既然你在使用 purrr
你应该使用 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"
所以在这种情况下,这确实与非标准评估没有任何关系。这只是关于为工作使用正确的功能。