我不知道如何列出和打印工作区中的所有对象。我想看到他们所有人并了解发生了什么。例如,ls()
给你 30 个对象。除了单独键入它们之外,如何将它们全部显示出来。看起来如此微不足道,解决方案可能会很尴尬。我最接近ls.str()
的是循环对象的想法。
编辑:这不适用于数据框。我有一个充满功能的工作区,没有数据,并且想了解哪些引用了哪些等。
您的意思是“显示”,意思是“对于 中的每个对象ls()
,我想看看如果我在提示中输入它会看到什么”?如果你有一些 1000x10000 的矩阵,你还想打印它怎么办?我个人喜欢ls.str()
-我认为它对所有内容都提供了简洁的概述,并且很好地处理了我刚才提到的情况。
但是,如果您想基本上“显示”每个对象,即在提示符上键入每个对象,我建议使用一个循环:
for ( obj in ls() ) { print(get(obj)) }
由于ls()
返回变量名称的字符向量,我需要使用get(obj)
which 获取名称在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()
它处理大对象的方式(但我使用很多巨大的(数百万个元素)矩阵,所以这是我的偏好)。
如果您只想要使用的变量的名称:
ls()
如果您还想打印变量以及内容,请使用以下命令:
mget(ls())
这应该做你需要的。
对于带有一些矩阵、向量和数据框的新打开的工作区,它对我来说效果很好。
我发现使用RStudio可以让我查看环境中的所有对象并与每个对象直接交互。我确信一个好的 IDE 将允许您的问题似乎需要进行那种探索。这对于让您查看大量对象特别有用。
相信我:你真的不想打印所有对象的所有内容。想象一下打印出来matrix(1:1e5,100,1000)
:-( 。有一些有用的 R 工具,例如summary
, table
,str
它们通常会告诉您有关数据对象的足够信息,让您知道它是什么以及您想用它做什么。如果您有更具体的问题,例如,“我的哪些数据帧具有 NA 值?”,您可以编写命令或迷你函数来进行查找。
我为自己编写了一些名称,例如lstype(objtype='closure')
,其中列出了指定类型的所有对象。
如果您的工作区中有一个或多个大型对象(例如向量、矩阵和/或列表),那么以下代码应该可以为您提供紧凑的输出。
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) )
}
}