R缩进输出

R indent output

是否可以在 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

我几个月前搜索过这个,一无所获,现在正在重新搜索。

我目前的想法是 "overwrite"(我忘记了特殊术语)函数 cat and/or print 带有附加参数,例如:

cat("random text", indent=4)

只有我坚持这个,我不太喜欢这个程序。 有什么想法吗?

编辑: 我应该更具体一点,不过还是要感谢你的 \t(我的天啊,我完全忘记了这个 -.-)并且我可以在 cat 中格式化它。 给定的解决方案有效,但只能解决我的第二选择路径。 我想第一个代码示例中显示的开关不存在?

我的问题是我有一个更大的程序的一部分有多个下标,每个下标的输出都应该缩进。这对于 cat() 中的“\t”或只是空白是绝对可能的,但必须在每个命令中完成,我不太喜欢。

解决方案

我使用了 Chris C 的代码并以非常简单的方式对其进行了扩展。 (非常感谢克里斯!)

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)
}

与您使用 \n 打印换行符的方式相同,您可以使用 \t 打印制表符。

例如

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

作为替代方案,您可以创建一个名为 cattcat 的衍生版本,并根据脚本更改选项。例如。

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()

您可以考虑非常通用的函数 capture.output(...),它计算作为主要输入参数提供的“...”表达式列表,并存储文本输出(就像它会显示在控制台)改为字符向量。然后,您只需根据需要修改字符串:在这里您要为每个字符串添加一些前导空格。最后,将字符串写入控制台。

这些都可以在一行嵌套调用中完成。例如:

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

因此我建议大家阅读capture.output函数的帮助,然后尝试将其用于各种用途。实际上,由于主输入具有'...' 类列表结构的通常灵活性,您可以自由地包括,例如,对一个自制函数的调用,从而几乎可以做任何事情。至于缩进,只需使用 paste 函数即可完成,一旦前者发挥了它的魔力。