当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R relist 允许重新列出未列出()的对象


R语言 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

合乎逻辑的。是否应该取消列出 x 的列表组件?

use.names

合乎逻辑的。名字应该被保留吗?

细节

有些函数需要许多参数,这些参数最容易用复杂的结构表示,例如嵌套列表。不幸的是,许多数学函数R, 包括optimnlm只能对定义域为向量的函数进行操作。Runlist()将嵌套列表对象转换为向量表示。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.

也可以看看

unlist

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Allow Re-Listing an unlist()ed Object。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。