當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。