重新定义R中的length.character

Kar*_* W. 2 string r

由于长度是一种通用方法,为什么我不能这样做

length.character <- nchar
Run Code Online (Sandbox Code Playgroud)

?似乎字符串在R中被特殊处理.这是有原因的吗?你会不鼓励定义head.character和tail.character等函数吗?

Gre*_*now 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
> 
Run Code Online (Sandbox Code Playgroud)