relist
位于 utils
包(package)。 说明
relist()
是一个 S3 通用函数,具有一些方法,以便在与 (S3) 类 "relistable"
的对象 obj
一起使用时轻松反转 unlist(obj)
。
用法
relist(flesh, skeleton)
## Default S3 method:
relist(flesh, skeleton = attr(flesh, "skeleton"))
## S3 method for class 'factor'
relist(flesh, skeleton = attr(flesh, "skeleton"))
## S3 method for class 'list'
relist(flesh, skeleton = attr(flesh, "skeleton"))
## S3 method for class 'matrix'
relist(flesh, skeleton = attr(flesh, "skeleton"))
as.relistable(x)
is.relistable(x)
## S3 method for class 'relistable'
unlist(x, recursive = TRUE, use.names = TRUE)
参数
flesh |
要重新列出的向量 |
skeleton |
一个列表,其结构决定结果的结构 |
x |
一个R对象,通常是列表(或向量)。 |
recursive |
合乎逻辑的。是否应该取消列出 |
use.names |
合乎逻辑的。名字应该被保留吗? |
细节
有些函数需要许多参数,这些参数最容易用复杂的结构表示,例如嵌套列表。不幸的是,许多数学函数R, 包括optim
和nlm
只能对定义域为向量的函数进行操作。R已unlist()
将嵌套列表对象转换为向量表示。relist()
,其方法和此处提到的函数提供了将向量转换回方便的结构表示的逆运算。这允许结构化函数(例如optim()
)有简单的数学接口。
例如,多元正态模型的似然函数需要方差-协方差矩阵和均值向量。将其表示为包含向量和矩阵的列表是最方便的。典型的参数可能如下所示
list(mean = c(0, 1), vcov = cbind(c(1, 1), c(1, 0))).
但是,optim
无法对以列表作为输入的函数进行操作;它只喜欢数字向量。解决办法就是转换。给定一个计算所需概率密度的函数 mvdnorm(x, mean, vcov, log = FALSE)
,则
ipar <- list(mean = c(0, 1), vcov = c bind(c(1, 1), c(1, 0))) initial.param <- as.relistable(ipar) ll <- function(param.vector) { param <- relist(param.vector, skeleton = ipar) -sum(mvdnorm(x, mean = param$mean, vcov = param$vcov, log = TRUE)) } optim(unlist(initial.param), ll)
relist
采用两个参数:骨架和肉体。 Skeleton 是一个示例对象,其 shape
正确,但内容错误。 flesh
是一个内容正确但形状错误的向量。调用
relist(flesh, skeleton)
会将肉的内容放在骨骼上。如果骨架存储为肉体内的属性,则无需显式指定骨架。特别是,如果肉体是使用 unlist(as.relistable(obj))
从某个对象 obj 创建的,那么骨架属性会自动设置。 (请注意,这不适用于此处的示例,因为 optim
正在创建一个新向量以传递给 ll
而不是其 par
参数。)
只要 skeleton
具有正确的形状,它就应该是 unlist
的逆。这些等式成立:
relist(unlist(x), x) == x unlist(relist(y, skeleton)) == y x <- as.relistable(x) relist(unlist(x)) == x
但请注意,重新列出的对象可能不是base identical由于在取消列出步骤期间执行的隐式强制,该信息被更改为骨架。重新列出的对象的所有元素与未列出的对象具有相同的类型。NULL
值被强制为该类型的空向量。
值
(S3) 类 "relistable"
(和 "list"
)的对象。
例子
ipar <- list(mean = c(0, 1), vcov = cbind(c(1, 1), c(1, 0)))
initial.param <- as.relistable(ipar)
ul <- unlist(initial.param)
relist(ul)
stopifnot(identical(relist(ul), initial.param))
作者
R Core, based on a code proposal by Andrew Clausen.
也可以看看
相关用法
- R readRegistry 读取 Windows 注册表配置单元
- R removeSource 从函数或语言对象中删除存储的源
- R read.DIF 从电子表格输入数据
- R remove.packages 删除已安装的软件包
- R read.socket 从套接字读取或写入
- R read.table 数据输入
- R recover 错误后浏览
- R read.fortran 以类似 Fortran 的方式读取固定格式数据
- R read.fwf 读取固定宽度格式文件
- R roman 罗马数字
- R rtags 类似 Etags 的 R 标记实用程序
- R rcompgen R 的补全生成器
- R select.list 从列表中选择项目
- R COMPILE 编译用于 R 的文件
- R browseVignettes 在 HTML 浏览器中列出晕影
- R hasName 检查姓名
- R nsl 按主机名查找 IP 地址
- R edit 调用文本编辑器
- R create.post 准备电子邮件和帖子的辅助函数
- R hsearch-utils 帮助搜索实用程序
- R download.packages 从类似 CRAN 的存储库下载软件包
- R DLL.version MS Windows 上的 DLL 版本信息
- R ls.str 列表对象及其结构
- R Rscript R 前端脚本
- R bug.report 发送错误报告
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Allow Re-Listing an unlist()ed Object。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。