是否有一个等同于bash命令的R?

时间:2010-08-17 14:58:33

标签: r

如果我想查看R中的长输出或变量,是否有更多的bash命令?

7 个答案:

答案 0 :(得分:11)

为什么不使用内置的file.show?

more <- function(x) {
  file <- tempfile()
  sink(file); on.exit(sink())
  print(x)
  file.show(file, delete.file = T)
}

more(mtcars)
more(more)

答案 1 :(得分:3)

如果您使用ESS,您可以在闲暇时滚动浏览R输出缓冲区,当然也可以搜索等。只是说...

答案 2 :(得分:3)

对于我们这些不想使用Emacs的人...... ;-) @ Dirk

more <- function(x, n=6) {
  i <- 1
  while(i <= length(x)) {
    j <- min(length(x),i+n-1)
    print(x[i:j])
    i <- i+n
    if(i <= length(x)) readline()
  }
}

这对所有对象都不是很好。这只是默认方法的一个例子。您需要为matrixdata.frame等编写方法

答案 3 :(得分:1)

我不相信,但它应该很容易创建。只需查看readline("\nType <Return> to go to the next page : ")的用户输入,然后递归遍历对象。

答案 4 :(得分:1)

这是我的诀窍:我在Linux中使用screenbyobu,然后使用F7,它允许我来回滚动我想要的任何内容。然后,当我从more获得更多信息时,我很少在bash中使用less。 ;-) less超过more。非常麻烦。

另一个不错的多平台选项是RStudio,它允许您轻松地来回滚动。

答案 5 :(得分:0)

我很少滚动浏览R中的整个数据集。当我这样做时,我倾向于将其推送到CSV然后使用电子表格来仔细阅读。仅使用短块查看输出,我使用head()tail()

我当然已经被我的同事问过我tail(head))(是的,在尾巴笑话中永远不会变老)

如果你只想看一个矢量,你可以这样做:

system("more", input=as.character(rnorm(1000)))

这对数据框或矩阵不起作用,因为input参数需要一个字符向量。

修改

对于数据框和矩阵,您可以将我的“导出到CSV”和命令行more组合在一起,如下所示:

myDF <- data.frame(a=rnorm(1000), b=rnorm(1000))

more <- function(dataFrame) {
  myTempFile <- tempfile()
  write.csv(dataFrame, file=myTempFile, row.names = F)
  system(paste("more", myTempFile))
}

more(myDF)

答案 6 :(得分:0)

或者只使用sytem more

more<-function(x){
    tempfile()->fn;
    sink(fn);print(x);sink();
    system(sprintf('more %s',fn));
    system(sprintf('rm %s',fn));
}
我喜欢

...或less,因为我没有弄乱终端:

less<-function(x){
    tempfile()->fn;
    sink(fn);print(x);sink();
    system(sprintf('less %s',fn));
    system(sprintf('rm %s',fn));
}

两者都是* nixes;对于Windows,我认为最好根据edit(和字符串连接)制作一些东西。