R:命名列表和描述列表

R: Named lists and description lists

R 有两个不太常用的 class:"Dlist" 和 "namedList"。

关于第一个,它是关于 Sys.getenv() 提到的,它 returns 是 class "Dlist" 的结果,如果它的参数丢失,为了漂亮的打印. class 实际上有一个 print.Dlist 方法。还有一个明显相关的 formatDL 函数来格式化描述列表。但是我不知道如何创建 class "Dlist" 的对象。

关于"namedList",手册是这么定义的:

the alternative to "list" that preserves the names attribute

在这种情况下,我无法创建这种类型的对象,而且我还没有找到任何使用它的实例。

如何创建 "Dlist" 或 "namedList"?
您能否提供一个示例,其中 "namedList" 比普通的 命名列表 更方便? (旨在作为列表 L,其中 names(L) 不是 NULL

A Dlist 是 R 的 Base 包中定义的非正式 class,其存在的唯一目的是漂亮地打印一个命名的字符向量。它根本不是一个列表,而是一种字符向量:

a <- Sys.getenv()
class(a)
# [1] "Dlist"
typeof(a)
# [1] "character"

您只需将 Dlist 写入命名字符向量的 class 属性即可创建:

hello_world <- c(Hello = "World", Hi = "Earth", Greetings = "planet"); 
class(hello_world) <- "Dlist"

hello_world
# Hello                    World
# Hi                       Earth
# Greetings                planet

您可以 select 格式化选项 formatDL:

cat(formatDL(hello_world, style = "list", width = 20), sep = "\n")
# Hello: World
# Hi: Earth
# Greetings: planet

Dlist 仅在 base R 中用于将环境变量打印到控制台。除非您想以这种方式打印命名的字符向量,否则您不需要 Dlist。


另一方面,namedList 是 methods 包中定义的正式 S4 对象(也在 R 中预加载)。它从 list 继承了它的属性并定义了一个方法——它自己的通用 S4 show 版本。 您可以将它用作基础 class,从中创建继承命名列表属性的新 S4 classes(即具有 names 属性的普通列表),尽管它不是清楚为什么一个用户足够先进来创建 S4 classes 不会自己做。它被定义为 here.

您可以使用 new 创建一个 namedList:

n <- new("namedList", list(a=1, b=2))
n
# An object of class  “namedList” 
# $`a`
# [1] 1
# 
# $b
# [1] 2
isS4(n)
# [1] TRUE