2015-02-24 2 views
0

Известно, что мы можем добавить класс «прикольных» на abc используяСкрыть атрибуты/Имя класса

class(abc) <- append(class(abc), "fun") 

После этого abc даст нам:

> abc <- matrix(1:4, nr=2) 
> class(abc) <- append(class(abc), "fun") 
> abc 
    [,1] [,2] 
[1,] 1 3 
[2,] 2 4 
attr(,"class") 
[1] "matrix" "fun" 

Есть ли способ, добавляемых класс «весело», чтобы abc но не показывая

attr(,"class") 
[1] "matrix" "fun" 

чтобы было ясно, Вот что я получаю:

> abc <- list(1:4, letters[1:3]) 
> abc 
[[1]] 
[1] 1 2 3 4 

[[2]] 
[1] "a" "b" "c" 

> class(abc) <- append(class(abc), "fun") 
> abc 
[[1]] 
[1] 1 2 3 4 

[[2]] 
[1] "a" "b" "c" 

attr(,"class") 
[1] "list" "fun" 
> class(abc) 
[1] "list" "fun" 

Но я хочу:

> abc <- list(1:4, letters[1:3]) 
> abc 
[[1]] 
[1] 1 2 3 4 

[[2]] 
[1] "a" "b" "c" 

> class(abc) <- append(class(abc), "fun") 
> abc 
[[1]] 
[1] 1 2 3 4 

[[2]] 
[1] "a" "b" "c" 

> class(abc) 
[1] "list" "fun" 

Спасибо!

ответ

1

Вы можете написать собственный способ print() для вашего класса.

print.fun <- function(x) { 
    class(x) <- Filter(function(x) x!="fun", class(x)) 
    print(x) 
} 

Обратите внимание, что, потому что вы добавление своего собственный класса в конце списка классов, если другой метод печати находится на более раннее значение в списке, то один будет использоваться вместо этого.

Смежные вопросы