R有两个不太常用的类:“ Dlist”和“ namedList”。

关于第一个,它是关于Sys.getenv()提及的,如果缺少其参数,则返回类“ Dlist”的结果,以进行良好的打印。实际上,该类有一个print.Dlist方法。还有一个显然与之相关的formatDL函数用于格式化描述列表。但是,我不知道如何创建“ Dlist”类的对象。

关于“ namedList”,由手册定义:


保留名称属性的“列表”的替代方法


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

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

最佳答案

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

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


您可以使用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的自身版本。
您可能会使用它作为基类,从中创建继承命名列表(即具有names属性的普通列表)属性的新S4类,尽管尚不清楚用户为何先进到足以创建S4类不只是自己做。它定义为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

09-13 11:07