2010-09-01 3 views
2

Так как длина является общим методом, поэтому не могу сделатьRedefine length.character в R

length.character <- nchar 

? Кажется, что строки рассматриваются в R. Есть ли причина для этого? Будете ли вы препятствовать определению функций, таких как head.character и tail.character?

ответ

8

Если посмотреть на странице справки для InternalMethods (упоминается в деталях части страницы справки для длины) он утверждает, что

Для повышения эффективности внутренней доставки только происходит на объектов, что это те, для которых «is.object» возвращает true.

Векторы не являются объектами в том же смысле, что и другие объекты, поэтому отправка метода не выполняется на основе каких-либо базовых векторов (а не только символов). если вы действительно хотите использовать этот тип отправки вам нужен определенный объект, например .:

> tmp <- state.name 
> class(tmp) <- 'mynewclass' 
> length.mynewclass <- nchar 
> length(tmp) 
[1] 7 6 7 8 10 8 11 8 7 7 6 5 8 7 4 6 8 9 5 8 13 8 9 11 8 
[26] 7 8 6 13 10 10 8 14 12 4 8 6 12 12 14 12 9 5 4 7 8 10 13 9 7 
> 
4

Мой 2с:

Строки специально не рассматриваются в R. Если length сделал то же самое, как nchar, то вы получите неожиданные результаты, если вы пытались вычислить length(c("foo", "bazz")). Или, говоря иначе, ожидаете ли вы, что length числового вектора вернет число цифр в каждом элементе вектора или длину самого вектора?

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

0

Теперь я нашел причину не определить head.character: он изменяет способ, как работает голова. Например:

head.character <- function(s,n) if(n<0) substr(s,1,nchar(s)+n) else substr(s,1,n) 
test <- c("abc", "bcd", "cde") 
head("abc", 2) # works fine 
head(test,2) 

Без определения головы, последняя строка вернется с ("ABC", "BCD"). Теперь, с определенным head.character, эта функция применяется к каждому элементу списка и возвращает c («ab», «bc», «cd»).

Но у меня есть strhead и функция strtail сейчас. :-)

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