Есть ли R эквивалентно команде bash больше?

Если я хочу просмотреть длинный вывод или переменную в R, есть ли эквивалент команды bash больше?

7
задан annavt 17 August 2010 в 14:58
поделиться

6 ответов

Если вы используете ESS, вы можете прокручивать выходной буфер R и, конечно же, выполнять поиск и т. Д. На досуге. Просто говорю ...

3
ответ дан 6 December 2019 в 09:57
поделиться

Для тех из нас, кто не хочет использовать 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 и т. Д.

3
ответ дан 6 December 2019 в 09:57
поделиться

Я редко просматриваю весь набор данных в 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)
0
ответ дан 6 December 2019 в 09:57
поделиться

Не думаю, но создать его должно быть легко. Просто найдите ввод пользователя с помощью readline ("\ nType , чтобы перейти на следующую страницу:") и рекурсивно прокрутите объект.

1
ответ дан 6 December 2019 в 09:57
поделиться

Или просто используйте 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 (и строковых соединений).

0
ответ дан 6 December 2019 в 09:57
поделиться

Почему бы не использовать встроенный файл file.show?

more <- function(x) {
  file <- tempfile()
  sink(file); on.exit(sink())
  print(x)
  file.show(file, delete.file = T)
}

more(mtcars)
more(more)
11
ответ дан 6 December 2019 в 09:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: