Нестандартные названия настроек оценки R

Я пытаюсь повторно вызвать функцию (в частности, Seurat :: DimPlot), где одним из аргументов является именованный список (Cell.highlight). Я планирую использовать purrr::imap, чтобы позвонить. У меня есть именованный список, где каждый элемент списка представляет собой вектор символов. Я хотел бы создать список для аргумента Cell.highlight Seurat :: DimPlot. Когда я попробовал

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, даже после прочтения, перечитывания и перечитывания Advanced-R Хэдли Викхэмса глава о квазиквотах и его глава об оценке, но похоже, что все части есть, я просто не могу их соединить


person HowYaDoing    schedule 29.04.2019    source источник


Ответы (1)


Поскольку вы являетесь пользователем 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"

Так что в данном случае это не имеет ничего общего с нестандартной оценкой. Это просто использование правильной функции для работы.

person MrFlick    schedule 29.04.2019
comment
Я действительно ненавижу, когда я настолько зацикливаюсь на видении проблемы одним способом, что упускаю очевидный ответ. Думаю, когда твой единственный инструмент - молоток, все начинает походить на гвоздь. Спасибо за новый инструмент! - person HowYaDoing; 30.04.2019