2014-09-06 6 views
1

Как указано в this question и обильной официальной документации & неофициальной R,Было бы глупо перекодировать `dim` для возврата` length`, если `dim (x) == NULL`?

x <- complex(15) 
dim(x) == NULL 

Для меня это раздражает, чтобы писать отдельный метод (или if положения) для атомных векторов, а не быть в состоянии использовать dim(x)[1]. Было бы глупо перекодировать dim (примитив), чтобы он автоматически возвращал length, если dim(x)==NULL?

Чтобы быть более конкретным: будут ли популярные пакеты сломаться, если я перекодирую dim, скажем, мой .Rprofile? Это глупо по другой причине, которую я не вижу?

+3

видите ли вы недостаток только вызывая более общую функцию что-то вроде 'Dim', как в' Dim <- функция (х) {если (is.vector (х)) длина (х) еще тусклый (х)} '? –

+0

@ JoshO'Brien Это хорошая идея. – isomorphismes

+1

См. 'NROW' и' NCOL' для функций, возвращающих экстенты в аспекте-агностик. –

ответ

4

Непонятно, что вы пытаетесь сделать, но функции NROW и NCOL - это способы извлечения экстентов в аспекте-агностик. Они обрабатывают векторы как векторы столбцов, поэтому NROW(X) совпадает с length(x) и NCOL(x) равно 1, когда x - вектор.

> x <- numeric(10) # or complex, character, logical, etc 
> nrow(x) 
NULL 
> NROW(x) 
[1] 10 
> NCOL(x) 
[1] 1 

> m <- matrix(1:10, nrow=5) 
> nrow(m) 
[1] 5 
> NROW(m) 
[1] 5 
> NCOL(m) 
[1] 2 
+0

Спасибо @Hong Ooi. Я не понимал в комментариях, что важна капитализация. – isomorphismes

+0

Этот ответ хороший, но другой вопрос намного лучше. Вот почему я переключил дубликаты. –

+0

Или, по крайней мере, у другого вопроса больше шансов получить хиты google. – isomorphismes