打印工作区中的所有对象

时间:2012-04-30 11:27:00

标签: r object workspace

我无法找到如何在工作区中列出和打印所有对象。我希望看到所有这些,并了解正在发生的事情。例如,ls()为您提供了30个对象。除了单独输入外,还可以显示所有内容。看起来如此微不足道,解决方案可能会非常尴尬。我最接近的是ls.str()以及循环对象的想法。

修改这不适用于数据框。我有一个充满功能的工作区,没有数据,并且想要了解哪些参考哪些等等。

5 个答案:

答案 0 :(得分:30)

你的意思是“显示”意味着“对于ls()中的每个对象,我想看看如果我在提示符中键入它会看到什么”?如果你有一些1000x10000的矩阵怎么办 - 你还想打印吗?我个人喜欢ls.str() - 我认为它简明扼要地概述了所有内容,并处理了我刚刚提到的案例。

但是如果你想在提示符中输入每个对象的基本上“显示”每个对象,我建议循环:

for ( obj in ls() ) { print(get(obj)) }

由于ls()返回变量名称的字符向量,我需要使用get(obj)来获取名称在obj中的变量。

您可能希望对此进行更改以便打印变量名称,例如

for ( obj in ls() ) { cat('---',obj,'---\n'); print(get(obj)) }

举个例子:

> a <- 1
> b <- LETTERS[1:10]
> c <- data.frame(a=LETTERS[1:10],b=runif(10))
> for ( obj in ls() ) { cat('---',obj,'---\n'); print(get(obj)) }
--- a ---
[1] 1
--- b ---
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"
--- c ---
   a         b
1  A 0.1087306
2  B 0.9577797
3  C 0.8995034
4  D 0.1434574
5  E 0.3548047
6  F 0.1950219
7  G 0.1453959
8  H 0.4071727
9  I 0.3324218
10 J 0.4342141

这确实有一个缺点 - 下次你致电ls()时,那里现在有一个obj。我确定有一些解决方法。

无论如何,我认为我仍然更喜欢ls.str()处理大对象的方式(但我使用了很多巨大的(数百万个元素)矩阵,所以这是我的偏好。)

答案 1 :(得分:9)

我发现使用RStudio可以让我查看环境中的所有对象并直接与每个对象进行交互。我相信一个好的IDE将允许您的问题似乎需要的那种探索。这对于为大量对象提供视图尤其有用。

答案 2 :(得分:6)

相信我:你真的不想打印所有对象的所有内容。想象一下打印matrix(1:1e5,100,1000) :-(。有一些有用的R工具,如summarytablestr,它们通常会告诉您足够的数据对象。知道它是什么以及你想用它做什么。 如果您有更具体的问题,例如“我的哪个数据帧具有NA值?” ,你可以编写命令或小功能来进行查找 我为自己写了一些像lstype(objtype='closure')这样的名字,列出了指定类型的所有对象。

答案 3 :(得分:6)

如果您只想要使用的变量名称:

ls()

如果您想要打印变量以及内容,请使用命令:

mget(ls())

这应该做你需要的。

对于带有一些矩阵,向量和数据框架的新打开的工作区,它对我来说很有用。

答案 4 :(得分:0)

如果工作区中有一个或多个大对象(例如矢量,矩阵和/或列表),下面的代码应该可以为您提供紧凑的输出。

for ( obj in ls() ) { 
  cat('---',obj,'---\n');
  if ( class(get(obj)) == 'matrix'  ){
    print( get(obj)[1:min(ncol(get(obj)),10),1:min(ncol(get(obj)),10)] ) 
  }else if ( class(get(obj)) == 'numeric' |  class(get(obj)) == 'integer'  ){
    print( get(obj)[1:min(length(get(obj)),10)] )
  }else if( class(get(obj)) == 'list'){
    for (i in 1:length(get(obj))){
      if ( class(get(obj)) == 'matrix'  ){
        print( get(obj)[[i]][1:min(ncol(get(obj)[[i]]),10),1:min(ncol(get(obj)[[i]]),10)] ) 
      }else if ( class(get(obj)[[i]]) == 'numeric' |  class(get(obj)[[i]]) == 'integer'  ){
        print( get(obj)[[i]][1:min(length(get(obj)[[i]]),10)] )
      }else{
        print( get(obj)[[i]] ) 
      } 
    }
  }else{
    print( get(obj) ) 
  }
}