7

我一直在阅读 R 源代码,试图了解它如何对帮助页面进行分页(例如?c)。我认为它正在使用less,但我无法找到执行此操作的功能。我想我可以做到system(gettextf("echo %s | less", my_text)),但它不会在 Windows 中工作。

4

3 回答 3

7

看看?page?file.show

page(runif(1e5))
于 2013-07-06T20:57:36.990 回答
2

+1 到@sgibb,page()真的很有用。不过,在某些情况下,我想采用更复杂的解决方案。您还可以将?sink?file.show结合使用:

sink(file="tempSink", type="output")
  ...
  # various commands
  ...
sink()
file.show(file="tempSink", delete.file=TRUE, title="my output")

例如,page()只显示一个输出,但您可能希望同时查看多个。我还注意到有时page()不起作用,但上述方法会起作用(我不知道为什么——它可能只是一个错误)。

于 2013-07-07T04:04:12.227 回答
0

请记住,page()您需要指定method="print"以获取从提示中看到的可读格式:

> smry = summary(...)
> page(smry) # this is incomprehensible
structure(list(`Response Y1` = structure(list(call = lm(formula = Y1 ~ 
    designmatrix + 0), terms = Y1 ~ designmatrix + 0, residuals = new("VectorSpaceModel", 
    .Data = structure(c(0.0787047361879546, -1.45136789927732, 
...
> page(smry, method="print") # much better
Response Y1 :

Call:
lm(formula = Y1 ~ designmatrix + 0)

Residuals:
           [,1]
Min    -5.48880
...

如果您不想在查看第一行之前等待整个该死的事情完成输出,请尝试以下操作:

> capture.output(smry, file=pipe("less"))

它产生与我相同的结果page(.., method="print"),但第一行立即出现,而不是在静默缓冲 4 秒后出现(对于这个特定示例)。

此外,有时在capture.output和朋友一起玩之后,你发现你在 R 提示符下输入的东西停止产生输出,那么你需要调用sink()类似的东西

于 2019-02-09T04:14:40.057 回答