R缩进输出

时间:2015-11-14 14:09:10

标签: r output indentation

是否可以在R?

中缩进输出

e.g。

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()内的空白,但必须在每个命令中完成,我不太喜欢。

解决方案

我使用了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)
}

2 个答案:

答案 0 :(得分: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的{​​{1}}衍生产品,并根据脚本更改选项。例如。

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

答案 1 :(得分:1)

你可以考虑一个多功能的功能capture.output(...),它会评估&#39; ...&#39;作为主输入参数提供的表达式列表,并将文本输出(就像它将在控制台中显示一样)存储到字符向量中。然后,您只需要根据需要修改字符串:在这里,您要为每个字符串添加一些前导空格。最后,将字符串写入控制台。

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

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

因此,我建议大家阅读capture.output函数的帮助,然后尝试将其用于各种目的。实际上,由于主要输入具有...&#39; paste&#39;类似于列表的结构,你可以自由地包括,例如,调用一个自制函数,因此几乎可以做任何事情。至于缩进,只需用function areEqual(a, b) { if ( a.length != b.length) { return false; } return a.filter(function(i) { return !b.includes(i); }).length === 0; } 函数完成,一旦前者完成了它的魔力。