Есть ли R-эквивалент команды bash больше? - PullRequest
7 голосов
/ 17 августа 2010

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

Ответы [ 7 ]

11 голосов
/ 18 августа 2010

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

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

more(mtcars)
more(more)
3 голосов
/ 17 августа 2010

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

Это не будет красиво на всех объектах. Это просто пример метода по умолчанию. Вам нужно написать методы для matrix, data.frame и т. Д.

3 голосов
/ 17 августа 2010

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

1 голос
/ 29 октября 2011

Вот мой трюк: я использую screen или byobu в Linux, а затем F7, что позволяет мне прокручивать назад и вперед все, что я хочу. Опять же, я редко использую more в bash, когда получаю намного больше от less. ;-) less - это больше, чем more. Очень хилый.

Еще одним замечательным мультиплатформенным вариантом является RStudio, который позволяет с легкостью перемещаться назад и вперед.

1 голос
/ 17 августа 2010

Я не верю в это, но это должно быть легко создать. Просто найдите пользовательский ввод с помощью readline("\nType <Return> to go to the next page : ") и рекурсивно переберите объект.

0 голосов
/ 17 августа 2010

Или просто используйте 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));
}

Оба предназначены для* nixes;для Windows я думаю, что лучше сделать что-нибудь на основе edit (и строковых соединений).

0 голосов
/ 17 августа 2010

Я редко пролистываю весь набор данных в R. Когда я это делаю, я склонен передавать его в CSV, а затем использовать электронную таблицу для его просмотра.Для просмотра коротких фрагментов я использую head() или tail()

Мои коллеги, конечно, спросили меня, если я tail(head)) (да, шутки с головой в хвосте никогда не стареютмне)

Если вы хотите посмотреть только на вектор, вы можете сделать это:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...