2015-11-14 5 views
1

Можно ли выводить отступ в R?Выход с отступом R

например.

cat("text1\n") 

indent.switch(indent=4) 
cat("random text\n") 
print("another random text") 
indent.switch(indent=0) 

cat("text2\n") 

в результате

text1 
    random text 
    another random text 
text2 

я искал это несколько месяцев назад, ничего не нашли и теперь искать снова.

Моя текущая идея состоит в том, чтобы «переписать» (я забыл специальный термин) функции cat и/или print с дополнительным аргументом, как:

cat("random text", indent=4) 

Только я застрял с этим, и я не люблю эта процедура очень много. Любые идеи?

Редактировать: Мне должно быть более подробно, тем не менее, спасибо за \ t (omg, я полностью забыл это -.-) и что я могу отформатировать его внутри cat. Данные решения работают, но решают только мой путь второго выбора. Переключатель, как показано в моем первом кодексе, не существует Я полагаю?

Моя проблема заключается в том, что у меня есть части более крупной программы, которые имеют несколько индексов, а выход каждого индекса должен быть отступом. Это абсолютно возможно с помощью «\ t» или просто пробелов внутри cat(), но это должно выполняться в каждой команде, что мне не очень нравится.

Решение

Я использовал код Криса Ĉ и расширил его в очень простой способ. (Большое спасибо Крис!)

define.catt <- function(ntab = NULL, nspace=NULL){ 
    catt <- function(input = NULL){ 
     if(!is.null(ntab)) cat(paste0(paste(rep("\t", ntab), collapse = ""), input)) 
     if(!is.null(nspace)) cat(paste0(paste(rep(" ", nspace), collapse = ""), input)) 
     if(is.null(ntab) && is.null(nspace)) cat(input) 
    } 
    return(catt) 
} 
+0

вы можете написать многострочные строки с отступом и разрывами строк в одной строке и 'cat', которые – rawr

+0

Пожалуйста, см. Мое редактирование в ответ на ваше редактирование. –

+0

Переопределение 'cat' вовсе не плохой способ, хотя я бы предпочел немного другой синтаксис из предложенного вами, чтобы упростить компоновку (по существу, облегчить последующий отступ во вложенных вызовах функций или аналогичных). –

ответ

2

Точно так же вы использовали \n для печати новой строки, вы можете использовать \t напечатать вкладку.

E.g.

cat("Parent level \n \t Child level \n \t \t Double Child \n \t Child \n Parent level") 

Оценивает к

Parent level 
    Child level 
     Double Child 
    Child 
Parent level 

В качестве альтернативы, вы можете создать производную cat называется catt и изменять параметры в зависимости от сценария. Например.

define.catt <- function(ntab = NULL){ 
    catt <- function(input = NULL){ 
     cat(paste0(paste(rep("\t", ntab), collapse = ""), input)) 
    } 
    return(catt) 
} 

Вы бы затем установить catt с, однако многие вкладками разыскивается

catt <- define.catt(ntab = 1) 
catt("hi") 
    hi 
catt <- define.catt(ntab = 2) 
catt("hi") 
     hi 

И просто использовать catt() вместо cat().

1

Вы можете рассмотреть очень разносторонний функцию capture.output(...), которая оценивает список «...» выражений, предоставленных в качестве основных входных параметров, и сохраняет текстовый вывод (как если он будет отображаться в консоли) в вектор символов вместо. Затем вам просто нужно изменить строки по желанию: здесь вы хотите добавить некоторые ведущие пробелы в каждую строку.Наконец, вы записываете строки в консоль.

Это можно сделать в одной строке вложенных вызовов. Например:

writeLines(paste(" ", capture.output(print(head(iris))), sep="")) 

Поэтому я рекомендую всем вам прочитать справку функции capture.output, а затем попытаться использовать его для различных целей. Действительно, поскольку основной вход имеет обычную гибкость структуры списка «...», вы можете включать, например, вызов одной домашней функции и, таким образом, делать практически все. Что касается отступов, это просто делается с помощью функции paste, как только первая сделала свою магию.

Смежные вопросы