Распечатать все объекты в рабочей области
Я не могу узнать, как перечислить и распечатать все объекты в рабочей области. Я хотел бы увидеть их всех и понять, что происходит. Например, ls()
дает вам 30 предметов. Как, кроме ввода их по отдельности, можно отобразить их все. Кажется настолько тривиальным, решение, вероятно, будет довольно смущающим. Самый близкий я был ls.str()
и идея зацикливания на объектах.
Изменить: это не для фреймов данных. У меня есть рабочее пространство, полное функций, без данных, и мне нравится понимать, какие из них ссылаются на какие и т. Д.
5 ответов
Вы имеете в виду "отображение" в смысле "для каждого объекта в 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()
за то, как он обрабатывает большие объекты (но я работаю с множеством огромных (миллионы элементов) матриц, так что это мое предпочтение).
Если вам просто нужны имена переменных, которые вы используете:
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) )
}
}