Если я хочу просмотреть длинный вывод или переменную в R, есть ли эквивалент команды bash больше?
Если вы используете ESS, вы можете прокручивать выходной буфер R и, конечно же, выполнять поиск и т. Д. На досуге. Просто говорю ...
Для тех из нас, кто не хочет использовать Emacs ... ;-) @ Dirk
more <- function(x, n=6) {
i <- 1
while(i <= length(x)) {
j <- min(length(x),i+n-1)
print(x[i:j])
i <- i+n
if(i <= length(x)) readline()
}
}
Это не будет подходить для всех объектов. Это просто пример метода по умолчанию. Вам нужно будет написать методы для матрицы
, data.frame
и т. Д.
Я редко просматриваю весь набор данных в R. Когда я это делаю, я обычно помещаю его в CSV, а затем использую электронную таблицу для просмотра. Чтобы просто просмотреть вывод короткими фрагментами, я использую head ()
или tail ()
. Мои коллеги, конечно, спрашивали меня, tail (голова) )
(да, шутки «голова в хвосте» мне никогда не надоедают)
Если вы хотите смотреть только на вектор, вы можете сделать следующее:
system("more", input=as.character(rnorm(1000)))
Это не работает с фреймами данных или матрицами, потому что параметр input
требует вектора символов.
edit
для фреймов данных и матриц вы могли бы объединить мой «экспорт в CSV» и командную строку more
функционируют следующим образом:
myDF <- data.frame(a=rnorm(1000), b=rnorm(1000))
more <- function(dataFrame) {
myTempFile <- tempfile()
write.csv(dataFrame, file=myTempFile, row.names = F)
system(paste("more", myTempFile))
}
more(myDF)
Не думаю, но создать его должно быть легко. Просто найдите ввод пользователя с помощью readline ("\ nType
и рекурсивно прокрутите объект.
Или просто используйте sytem more
:
more<-function(x){
tempfile()->fn;
sink(fn);print(x);sink();
system(sprintf('more %s',fn));
system(sprintf('rm %s',fn));
}
... или less
, что мне нравится, потому что я не путаю терминал:
less<-function(x){
tempfile()->fn;
sink(fn);print(x);sink();
system(sprintf('less %s',fn));
system(sprintf('rm %s',fn));
}
Оба предназначены для * nix; для Windows, думаю, лучше сделать что-нибудь на основе edit
(и строковых соединений).
Почему бы не использовать встроенный файл file.show?
more <- function(x) {
file <- tempfile()
sink(file); on.exit(sink())
print(x)
file.show(file, delete.file = T)
}
more(mtcars)
more(more)