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