data.frame
-ի սկզբնաղբյուրում կոդի վերջին երեք տողերը սահմանում են ատրիբուտները և վերադարձնում արդյունքը:
...
attr(value, "row.names") <- row.names
attr(value, "class") <- "data.frame"
value
}
Իմ գրած գործառույթում արդյունքը անվանված ցուցակ է, որը ստեղծվել է lapply
-ի կողմից: Նախքան ֆունկցիայի մարմնում որևէ հատկանիշ դնելը, արդյունքը հետևյալն է.
> x <- data.frame(a = 1:5, b = letters[1:5])
> (g <- grep.dataframe("a|c", x))
# ...
# $b
# value row
# 1 a 1
# 2 c 3
> attributes(g) # I want "list" in here...
# $names
# [1] "a" "b"
Ես կցանկանայի, որ «դասը» ներառվեր ատրիբուտների ցանկում, ուստի ավելացնում եմ attr(res, "class") <- "list"
(res
վերջնական արդյունքն է) res
-ից անմիջապես առաջ: «class»-ն այժմ հայտնվում է ատրիբուտների ցանկում: Այնուամենայնիվ, այն նաև տպվում է ֆունկցիայի արդյունքով, որը ես չեմ ուզում: Փորձեցի փաթաթել invisible
-ով, բայց չստացվեց:
Ինչու՞ են ձեռքով նշանակված ատրիբուտները տպագրվում ֆունկցիայի արդյունքով, բայց փակվում են իմ ստեղծած տվյալների նոր շրջանակում:
> (h <- grep.dataframe("a|c", x))
# ...
# $b
# value row
# 1 a 1
# 2 c 3
# attr(,"class") # ...This prints with the result. I don't want that.
# [1] "list"
> attributes(h) # ...But I want these attributes
# $names
# [1] "a" "b"
# $class
# [1] "list"