作者Wush978 (拒看低质媒体)
看板R_Language
标题Re: [问题] 函数的output排版,与一些相关问题
时间Mon Dec 23 01:16:02 2013
※ 引述《coo20819 (Mike)》之铭言:
: [问题类型]:
: 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来),
: [软体熟悉度]:
: 使用者(已经有用R 做过"一点"作品)
: [问题叙述]:
: 版上各位好,目前我在写一些函数想做成套件,希望让output排版可以漂亮一点,
: 所以使用cat这个函数,但是使用cat会强制在Consolo输出,可以看例子
: 会比较容易理解我的问题,谢谢
: [程式范例]:
: square <- function(x) {
: cat(" It is a test.", "\n")
: cat(" The square of (", x, ") equal to", x^2)
: }
: square(2)
: temp <- square(2)
: 简单来说,我希望temp <- square(2)这行可以不要在Consolo显示
: It is a test.
: The square of ( 2 ) equal to 4,
: 我打temp才出现
: It is a test.
: The square of ( 2 ) equal to 4
: 目前用Cat却导致相反结果,有小研究过过lm函数可以做到类似状态,
: 但lm函数太复杂,实在无法轻易看懂,想请教版上高手帮忙解答!!
: 在此感谢各位看完我的问题!谢谢。
: P.S. 另外在请教另一个小问题,上面
: It is a test.
: The square of ( 2 ) equal to 4
: 可以看出如果需要文字与变数夹杂,势必会有空格,也就是会这样( 2 )
: 这有办法解决吗? ( 2 ) ----> (2) 变成这样!
: 再次感谢!!!!
: [关键字]:
: 排版; cat
我不是很清楚你的需求, 不过我可以简单解释`lm`的原理给你.
也许你会比较清楚你该怎麽做.
---
`lm`会回传类别为"lm"的物件:
```r
g <- lm(speed ~ dist, cars)
class(g)
```
```
## [1] "lm"
```
当我们直接呼叫`g`的时候, 会呼叫`print`方法, 透过S3, 因为g是`lm`物件, 所以最终
会呼叫`print.lm`这个函数:
```r
print.lm(g) # the same as call g directly
```
```
##
## Call:
## lm(formula = speed ~ dist, data = cars)
##
## Coefficients:
## (Intercept) dist
## 8.284 0.166
```
```r
print.lm <- function(g) cat("overrided")
g
```
```
## overrided
```
当呼叫`lm(...)`的时候, R预设会呼叫`print(lm(...))`, 所以...
```r
lm(speed ~ dist, cars)
```
```
## overrided
```
上面`g <- lm(...)`的指令不会印出东西是因为`<-`这种函数预设会使用`invisible`来
让R放弃自动呼叫`print`
```r
invisible(g)
```
--
欢迎到ptt R_Language版分享R 的相关知识
欢迎加入 Taiwan R User Group :
http://www.facebook.com/Tw.R.User
聚会报名
http://www.meetup.com/Taiwan-R/
聚会影片
https://www.youtube.com/user/TWuseRGroup
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.34.138.85