R 打印工作区中的所有对象

R 打印工作区中的所有对象,r,object,workspace,R,Object,Workspace,我无法找到如何列出和打印工作区中的所有对象。我想看看他们,了解发生了什么。例如,ls()为您提供30个对象。除了单独输入外,如何才能全部显示它们。看起来很琐碎,解决方案可能会很尴尬。最近的一次是ls.str()和在对象上循环的想法 编辑:这不适用于数据帧。我有一个充满功能的工作区,没有数据,并且喜欢了解哪些功能引用了哪些功能等。相信我:你真的不想打印所有对象的所有内容。想象一下打印出矩阵(1:1E51001000):-(。有一些有用的R工具,如摘要,表格,和str,这些工具通常会告诉您关于数据对

我无法找到如何列出和打印工作区中的所有对象。我想看看他们,了解发生了什么。例如,
ls()
为您提供30个对象。除了单独输入外,如何才能全部显示它们。看起来很琐碎,解决方案可能会很尴尬。最近的一次是
ls.str()
和在对象上循环的想法


编辑:这不适用于数据帧。我有一个充满功能的工作区,没有数据,并且喜欢了解哪些功能引用了哪些功能等。

相信我:你真的不想打印所有对象的所有内容。想象一下打印出
矩阵(1:1E51001000)
:-(。有一些有用的R工具,如
摘要
表格
,和
str
,这些工具通常会告诉您关于数据对象的足够信息,让您知道它是什么以及您想对它做什么。 如果您有更具体的问题,例如,“我的哪个数据帧有NA值?”,您可以编写命令或小函数来进行查找。

我为自己写了一些名字,比如
lstype(objtype='closure')
,其中列出了指定类型的所有对象。

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

你的意思是“对于
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
>a b c for(ls()中的obj){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小时0.4071727
9 I 0.3324218
10 J 0.4342141
不过,这确实有一个缺点-下次调用
ls()
时,那里现在有一个
obj
。不过,我肯定有一些解决方法


无论如何,我认为我仍然更喜欢ls.str()处理大对象的方式(但我处理大量的(数百万个元素)矩阵,所以这是我的首选)。

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

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

如果您只想知道所使用变量的名称:

ls()
如果要打印变量和内容,请使用以下命令:

mget(ls())
这应该可以满足你的需要


对于一个新打开的带有一些矩阵、向量和数据帧的工作区,它对我来说很好。

相关:注意:运行
For(obj in ls()){print(get(obj))}
可能会导致您的R被冻结,如果您与R有很长的会话时间。是否有办法只打印工作区中选定对象的列表?