打印所有对象在工作区(Print all objects in a workspace)

2019-07-29 05:22发布

我无法找出如何列表和工作区打印的所有对象。 我希望看到所有这些,明白这是怎么回事。 例如, ls()为您提供了30个对象。 怎么样,除了个别打字他们,是可以显示他们。 看起来很琐碎,该解决方案可能会相当尴尬。 我来最接近的是ls.str()和遍历对象的想法。

编辑这是不是为数据帧。 我有一个工作空间充满的功能,而没有数据,并想了解哪些参考其等

Answer 1:

你的意思是在意义上的“显示”“在每个对象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()的方式,处理大对象(但我有很多的巨大的(百万元)矩阵工作,所以这是我的偏好)。



Answer 2:

我发现,使用RStudio让我对环境和每个直接交互的所有对象的视图。 我相信,一个好的IDE将允许排序探索,你的问题似乎需要的。 这尤其是给你的大量对象的视图是有用的。



Answer 3:

相信我:你真的不希望打印的所有对象的所有内容。 试想一下,打印出matrix(1:1e5,100,1000) :-(有一些有用的布线工具等。 summarytablestr一般告诉你足够的关于数据对象的让你知道它是什么,你想用它做的事。如果你有更多的具体问题,例如,“我的哪个dataframes有NA值?”,你可以写命令或微型功能做了展望。
我喜欢的名字写了一些对自己lstype(objtype='closure')其中列出了指定类型的所有对象。



Answer 4:

如果你只是想使用变量的名称:

ls()

如果你想打印变量与内容一起,以及然后使用命令:

mget(ls())

这应该做你所需要的。

对于新开的工作空间与一些矩阵,向量和数据帧它很适合我。



Answer 5:

,如果你有在工作区中的一个或多个大对象(如向量,矩阵,和/或列表)下面的代码位应该给您紧凑输出。

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) ) 
  }
}


文章来源: Print all objects in a workspace