2015-06-20 58 views
4

如何禁止(不打印)行號?
代碼讀取:如何禁止(不打印)行號?

dd<-data.frame(a=gl(2,3),b=gl(3,1,6)) 
model.matrix(~a + b + a*b, dd) 

嘗試次數:

> dd<-data.frame(a=gl(2,3),b=gl(3,1,6)) 
> model.matrix(~a + b + a*b, dd) 
    (Intercept) a2 b2 b3 a2:b2 a2:b3 
1   1 0 0 0  0  0 
2   1 0 1 0  0  0 
3   1 0 0 1  0  0 
4   1 1 0 0  0  0 
5   1 1 1 0  1  0 
6   1 1 0 1  0  1 
attr(,"assign") 
[1] 0 1 2 2 3 3 
attr(,"contrasts") 
attr(,"contrasts")$a 
[1] "contr.treatment" 
attr(,"contrasts")$b 
[1] "contr.treatment" 

> cat(model.matrix(~a + b + a*b, dd)) 
1 1 1 1 1 1 0 0 0 1 1 1 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 
> model.matrix(~ a + b + a*b, dd) 
    (Intercept) a2 b2 b3 a2:b2 a2:b3 
1   1 0 0 0  0  0 
2   1 0 1 0  0  0 
3   1 0 0 1  0  0 
4   1 1 0 0  0  0 
5   1 1 1 0  1  0 
6   1 1 0 1  0  1 
attr(,"assign") 
[1] 0 1 2 2 3 3 
attr(,"contrasts") 
attr(,"contrasts")$a 
[1] "contr.treatment" 
attr(,"contrasts")$b 
[1] "contr.treatment" 

> dd<-data.frame(a=gl(2,3),b=gl(3,1,6)) 
> print(model.matrix(~a + b + a*b, dd , rowNames=False)) 
    (Intercept) a2 b2 b3 a2:b2 a2:b3 
1   1 0 0 0  0  0 
2   1 0 1 0  0  0 
3   1 0 0 1  0  0 
4   1 1 0 0  0  0 
5   1 1 1 0  1  0 
6   1 1 0 1  0  1 
attr(,"assign") 
[1] 0 1 2 2 3 3 
attr(,"contrasts") 
attr(,"contrasts")$a 
[1] "contr.treatment" 
attr(,"contrasts")$b 
[1] "contr.treatment" 

> print(model.matrix(~a + b + a*b, dd , colNames=False)) 
    (Intercept) a2 b2 b3 a2:b2 a2:b3 
1   1 0 0 0  0  0 
2   1 0 1 0  0  0 
3   1 0 0 1  0  0 
4   1 1 0 0  0  0 
5   1 1 1 0  1  0 
6   1 1 0 1  0  1 
attr(,"assign") 
[1] 0 1 2 2 3 3 
attr(,"contrasts") 
attr(,"contrasts")$a 
[1] "contr.treatment" 
attr(,"contrasts")$b 
[1] "contr.treatment" 

回答

2

It is不幸的是,在打印矩陣時似乎沒有任何方法來抑制行名,不是嗎?一種選擇是強制使用data.frame並使用print.data.frame()的參數:

dd <- data.frame(a=gl(2,3),b=gl(3,1,6)); 
print(as.data.frame(model.matrix(~a + b + a*b, dd)),row.names=F); 
## (Intercept) a2 b2 b3 a2:b2 a2:b3 
##   1 0 0 0  0  0 
##   1 0 1 0  0  0 
##   1 0 0 1  0  0 
##   1 1 0 0  0  0 
##   1 1 1 0  1  0 
##   1 1 0 1  0  1 
1

您可以保存的model.matrix結果,然後更改rownames空字符。

dd<-data.frame(a=gl(2,3),b=gl(3,1,6)) 
mm <- model.matrix(~a + b + a*b, dd) 
mm 

# (Intercept) a2 b2 b3 a2:b2 a2:b3 
#1   1 0 0 0  0  0 
#2   1 0 1 0  0  0 
#3   1 0 0 1  0  0 
#4   1 1 0 0  0  0 
#5   1 1 1 0  1  0 
#6   1 1 0 1  0  1 
#attr(,"assign") 
#[1] 0 1 2 2 3 3 
#attr(,"contrasts") 
#attr(,"contrasts")$a 
#[1] "contr.treatment" 

#attr(,"contrasts")$b 
#[1] "contr.treatment" 

rownames(mm) <- rep("", 6) 
#rownames(mm) <- rep("", nrow(mm)) #more general 
mm 

# (Intercept) a2 b2 b3 a2:b2 a2:b3 
#   1 0 0 0  0  0 
#   1 0 1 0  0  0 
#   1 0 0 1  0  0 
#   1 1 0 0  0  0 
#   1 1 1 0  1  0 
#   1 1 0 1  0  1 
#attr(,"assign") 
#[1] 0 1 2 2 3 3 
#attr(,"contrasts") 
#attr(,"contrasts")$a 
#[1] "contr.treatment" 

#attr(,"contrasts")$b 
#[1] "contr.treatment" 
0

沒有print.matrix方法,所以相應的幫助頁面諮詢是?print.default那裏真的是壓抑的行或列名不爭論,所以我建議是這樣的:

(matrix(model.matrix(~a + b + a*b, dd) , nrow(dd))) 
    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 1 0 0 0 0 0 
[2,] 1 0 1 0 0 0 
[3,] 1 0 0 1 0 0 
[4,] 1 1 0 0 0 0 
[5,] 1 1 1 0 1 0 
[6,] 1 1 0 1 0 1 

另一個選擇是建立一個功能,可以根據需要進行操作,並且如果只希望抑制rownames或colnames,可以使邏輯更加精細:

> print.noRowCol <- function(x) {dimnames(x)<- NULL; print(x)} 
> print.noRowCol (model.matrix(~a + b + a*b, dd)) 
    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 1 0 0 0 0 0 
[2,] 1 0 1 0 0 0 
[3,] 1 0 0 1 0 0 
[4,] 1 1 0 0 0 0 
[5,] 1 1 1 0 1 0 
[6,] 1 1 0 1 0 1 
attr(,"assign") 
[1] 0 1 2 2 3 3 
attr(,"contrasts") 
attr(,"contrasts")$a 
[1] "contr.treatment" 

attr(,"contrasts")$b 
[1] "contr.treatment"