Если я правильно вас понимаю, вы хотели бы использовать команду apply только на определенных столбцах. Это , а не , что могли бы сделать именованные димны. Функция apply для матрицы или data.frame всегда применяется к всем строкам или всем столбцам. Названные имена dimnames позволяют вам выбрать использование строк или столбцов по имени вместо «обычных» 1
и 2
:
m <- matrix(1:12,4, dimnames=list(foo=letters[1:4], bar=LETTERS[1:3]))
apply(m, "bar", sum) # Use "bar" instead of 2 to refer to the columns
Однако, если у вас есть имена столбцов, к которым вы хотите обратиться, вы можете сделать это, сначала выбрав только эти столбцы:
n <- c("A","C")
apply(m[,n], 2, sum)
# A C
#10 42
Именованные dimnames являются побочным эффектом того, что dimnames хранятся в виде списка в атрибуте "dimnames" в matrix
или array
. Каждый компонент списка соответствует одному измерению и может быть назван. Это, вероятно, более полезно для многомерных массивов ...
Для data.frame
атрибут "dimnames" отсутствует. data.frame
- это, по сути, список, поэтому атрибуты «names» списка соответствуют именам столбцов, а дополнительный атрибут «row.names» соответствует именам строк. Из-за этого нет места для хранения names dimnames (у них, конечно, мог бы быть дополнительный атрибут, но они этого не сделали). Когда вы вызываете функцию dimnames
для data.frame, она просто создает список из атрибутов "row.names" и "names".