Нестандартные названия параметров оценки R - PullRequest
1 голос
/ 29 апреля 2019

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

1 Ответ

2 голосов
/ 29 апреля 2019

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

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

...