从R中的列表中打包和解包元素

Posted

技术标签:

【中文标题】从R中的列表中打包和解包元素【英文标题】:Packing and unpacking elements from list in R 【发布时间】:2015-07-28 18:54:52 【问题描述】:

我有两个与在 R 中使用列表有关的问题,我正在尝试了解如何改进我的幼稚解决方案。我在这里看到了关于similar topic 的问题,但是那里描述的方法没有帮助。

第一季度:

MWE:

a  <- c(1:5)
b  <- "adf"
c  <- array(rnorm(9), dim = c(3,3) )
制作一个列表,名称为“packedList”,同时保留名称 所有变量。 当前解决方案:packedList &lt;- list(a = a, b = b, c = c)

但是,如果变量的数量(上述问题中的三个,即a, b, c)是 大(假设我们有 20 个变量),那么我当前的解决方案可能不是 最好的。

这个想法在返回大量变量时很有用 一个函数。

第二季度:

MWE:给定packedList,提取变量a、b、c

我想将给定列表(即 packedList)中的所有元素提取到环境中,同时保留它们的名称。这与任务 1 相反。

例如:给定环境中的变量 packedList,我可以定义 a、b、c 如下:

 a <- packedList$a
 b <- packedList$b
 c <- packedList$c

但是,如果变量的数量非常多,那么我的解决方案可能会很麻烦。 - 在谷歌搜索后,我找到了one solution,但我也不确定它是否是最优雅的解决方案。解决方法如下图:

 x <- packedList
 for(i in 1:length(x))
       tempobj <- x[[i]]
       eval(parse(text=paste(names(x)[[i]],"= tempobj")))
 

【问题讨论】:

你可以使用 r 中的 zeallot 包进行解包。图书馆(***者) c(a,b,c) % a [1] 1 > b [1] 2 > c [1] 3 【参考方案1】:

您最有可能在寻找 mget (Q1) 和 list2env (Q2)。

这是一个小例子:

ls()  ## Starting with an empty workspace
# character(0)

## Create a few objects
a  <- c(1:5)
b  <- "adf"
c  <- array(rnorm(9), dim = c(3,3))

ls()  ## Three objects in your workspace
[1] "a" "b" "c"

## Pack them all into a list
mylist <- mget(ls())
mylist
# $a
# [1] 1 2 3 4 5
# 
# $b
# [1] "adf"
# 
# $c
#             [,1]       [,2]       [,3]
# [1,]  0.70647167  1.8662505  1.7941111
# [2,] -1.09570748  0.9505585  1.5194187
# [3,] -0.05225881 -1.4765127 -0.6091142

## Remove the original objects, keeping just the packed list   
rm(a, b, c)

ls()  ## only one object is there now
# [1] "mylist"

## Use `list2env` to recreate the objects
list2env(mylist, .GlobalEnv)
# <environment: R_GlobalEnv>
ls()  ## The list and the other objects...
# [1] "a"      "b"      "c"      "mylist"

【讨论】:

感谢您的回答。在环境中有四个变量(例如 a、b、c、d)但我们只想为三个变量(a、b、c)创建一个列表的情况下,mget(ls()) 将不起作用。关于如何解决它的任何想法? @skaur,只需提供您想要的值的字符向量:mget(c("a", "b", "c"))

以上是关于从R中的列表中打包和解包元素的主要内容,如果未能解决你的问题,请参考以下文章

python中*和**的打包和解包

python中*和**的打包和解包

pak文件的打包和解包

Linux文件压缩和解压缩命令

Python从入门到精通,100天就够了!——常用数据结构之元组

什么是打包和解包以及扩展打包数据