我可以系统地抑制控制台中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在评论部分所指出的那样,这些不是"行号",正如我所说的那样,但"指数在控制台中打印的第一行元素"。谢谢你的纠正。我试图相应地编辑我的问题。
答案 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