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