Превращение вектора символов в пустой список с именами из вектора символов - PullRequest
0 голосов
/ 24 сентября 2019

с учетом символьного вектора:

myvec <- c("one", "two", "three")

Я бы хотел превратить его в список, в котором имена элементов списка взяты из символьного вектора, а сам список пуст.Обратите внимание, что я не знаю длину вектора символов a priori .Мне это нужно, потому что позже я программно заполняю каждый элемент этого списка.

Мой желаемый результат:

str(mylist)

$one
NULL

$two
NULL

$three
NULL

Я придумал это:

turnList <- function(x){map(as.list(set_names(x)), ~NULL)}

И это работает, и все хорошо, но у меня есть ощущение, что это можно сделать проще ...?Решения с purrr и tidyverse в целом были бы идеальными ...

Ответы [ 3 ]

1 голос
/ 24 сентября 2019
setNames(vector("list", length(myvec)), myvec)
0 голосов
/ 24 сентября 2019

1) База R Пакеты не используются.

Map(function(x) NULL, myvec)

2) gsubfn За счет использования пакета мы можем немного его укоротить:

library(gsubfn)
fn$Map(. ~ NULL, myvec)

3) purrr или использование purrr (за счет пакета и еще нескольких символов в длине кода).Это похоже на подход в вопросе, но упрощает его, устраняя ненужный as.list.

library(purrr)
map(set_names(myvec), ~ NULL)

Примечание

Комментарий ниже этого ответа указывает на то, что NULLможно заменить на {}.Это сохранит два символа и относится к любому из вышеперечисленного.

0 голосов
/ 24 сентября 2019

Мы можем использовать vector

setNames(vector("list", length = length(myvec)), myvec)

#$one
#NULL

#$two
#NULL

#$three
#NULL

Или replicate

setNames(replicate(length(myvec), NULL), myvec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...