抑制R输出中的行/索引号

时间:2017-11-05 06:02:49

标签: r console rstudio

我可以系统地抑制控制台中R输出中输出行中第一个元素的索引吗?

我正在寻找prettify输出的选项,而无需输入任何额外的内容。我想如果有这样的壮举,它将被设置为.renviron文件(或类似)中的一个选项。 RStudio具体的答案是可以接受的。如果我忽略了设置中明显的东西,我会抱歉(我希望这个选项位于Preferences --> Code --> Display

目前R控制台和RStudio控制台显示:

1+1
[1] 2

我想看看:

1+1
2

我知道我可以通过cat(1+1)获得上述内容,但我正在寻找的是显示风格的系统性变化。类似于典型的Python输出(打开终端,键入Python后跟1+1。我希望

编辑:另一个例子。在RStudio中,如果我定义x=1:5,则它在环境中显示为int [1:5] 1 2 3 4 5:提供信息,我不介意。但是在R控制台中,它看起来像[1] 1 2 3 4 5,我找不到信息,特别是当有多行时。

我个人已经习惯了这些数字,正如我想象的那样,但这并不能使它们正确:(1)它们没有任何用处:如果你加宽控制台,线条就会变宽数字改变(如果它们标记了80个字符的宽度,好吧,也许它们可以达到目的),(2)当我将输出复制粘贴到讲义中时,这些行号会干扰清晰度并使新手感到困惑。

我还没有找到这个问题的答案,这是令人惊讶的,所以如果我错过了,请告诉我。以下问题是相关的,但不是重复的 https://stackoverflow.com/questions/3271939。我错过了重复吗?

编辑正如Adiel Loinger在评论部分所指出的那样,这些不是"行号",正如我所说的那样,但"指数在控制台中打印的第一行元素"。谢谢你的纠正。我试图相应地编辑我的问题。

2 个答案:

答案 0 :(得分:1)

我认为唯一的方法就是修改来源。 R是开源的,所以这不是不可能的,但这并不容易。

更改特定类别对象的打印格式更容易。例如,如果您不喜欢lm个对象的打印方式,您可以创建自己的print.lm方法来自行完成:

print.lm <- function (x, ...) 
{
    cat("My new version!")
}

然后

> lm(rnorm(10) ~ I(1:10))
My new version!

这对1+1之类的内容不起作用,因为出于效率原因,R始终使用内部版本的print方法进行自动打印。

顺便说一句,打印的索引有一个目的:如果你打印一个长向量并想知道某个特定元素的索引是什么,你只需要从行的开头算起,而不是从矢量的开头,找到它。

答案 1 :(得分:1)

您可以通过将答案转换为数据框来解决索引和行名。它不是完美的,但不是太难,取决于您的应用程序,也许是一种改进。功能如下。

具有稍微烦人的索引的基本功能:

  paste0("The answer is ", foo, "bar")
}

my_fun("foo")
[1] "The answer is foobar"

数据框架的改进:

注意:对于具有多行的数据帧,而不只是df,请使用print.data.frame(df, row.names = FALSE)

my_funner <- function(foo){
  df <- data.frame("The_answer_is" = paste0(foo, "bar"), row.names = "")
  df
}

my_funner("foo")
 The_answer_is
        foobar

另一个选择:

my_funnest <- function(foo){
  df <- data.frame("Sorry_about" = "The_answer_is", "the_col_names" = paste0(foo, "bar"), row.names = "")
  df
}
my_funnest("foo")
   Sorry_about the_col_names
 The_answer_is        foobar

但是这些差距很烦人,所以还有一个选择:

my_most_funnest <- function(foo){
  df <- data.frame("Sorry_about_the_col_names" = paste0("The answer is ", foo, "bar"), row.names = "")
  df
}

my_most_funnest("foo")
 Sorry_about_the_col_names
      The answer is foobar