使用 R 将向量对象的名称转换为向量列表的标签

时间:2021-01-05 19:55:07

标签: r list data-transform

我有一些向量,像这样:

months <- c("january", "february", "march", "october", "december") 
weekdays <- c("Sunday", "Monday", "Tuesday")
seasons <- c("Summer", "Winter", "Fall", "autumn")

我想创建一个这样的列表

timeWords_list <- list(months,  weekdays, seasons)

有什么办法可以直接用向量对象的名字来标记列表的对象吗?

我想要的结果可以这样实现:

names(timeWords_list) <- c("months",  "weekdays", "seasons")

但是,有没有办法直接做到这一点?无需重写这些名称(在字符串向量中)?

2 个答案:

答案 0 :(得分:4)

尝试这些单线中的任何一种。第一个确实要求每个名字写两次,但不需要提供名字的字符向量,代码的意图非常明确。第二个只要求名字写一次。第三个根本不需要写出名称,但只有在没有其他名称以 s 结尾的变量时才有效——如果有这样的名称,这些变量也将包含在列表中。

没有使用任何包。

L1 <- list(months = months, weekdays = weekdays, seasons = seasons)

L2 <- mget(c("months", "weekdays", "seasons"))

L3 <- mget(ls(pattern = "s$"))

答案 1 :(得分:2)

如果您已经在使用 tidyverse 中的软件包,那么 tibble::lst 已经这样做了:

tibble::lst(months,  weekdays, seasons)
# $months
# [1] "january"  "february" "march"    "october"  "december"
# $weekdays
# [1] "Sunday"  "Monday"  "Tuesday"
# $seasons
# [1] "Summer" "Winter" "Fall"   "autumn"

如果你不是,不过,你可以自己烘焙,借用https://stackoverflow.com/a/55019843/3358272

mylist <- function(...) setNames(list(...), as.character(match.call(expand.dots = FALSE)$...))
mylist(months,  weekdays, seasons)
# $months
# [1] "january"  "february" "march"    "october"  "december"
# $weekdays
# [1] "Sunday"  "Monday"  "Tuesday"
# $seasons
# [1] "Summer" "Winter" "Fall"   "autumn"

但请注意,它并不总是如您所愿。

mylist(months,  weekdays, seasons, c(1,27,pi))
# $months
# [1] "january"  "february" "march"    "october"  "december"
# $weekdays
# [1] "Sunday"  "Monday"  "Tuesday"
# $seasons
# [1] "Summer" "Winter" "Fall"   "autumn"
# $`c(1, 27, pi)`
# [1]  1.000000 27.000000  3.141593

tibble::lst 做同样的事情(就像许多尝试这种诡计的函数一样),所以这不是一个新问题。

相关问题