7.3 命名空间

7.3 命名空间

命名空间对于面向对象真的并没有要做的.对于比较随意的使用者,这些看起来像是一个不必要的并发症,同时看起来像是复杂性实际是由简单性伪装而成.

假设有两个都有一个recode()函数.你希望使用两个中的一个.但是并不会保证你想要的那个总是被首先查找到.这就是命名空间存在的答案.

为了理解命名空间,我们考虑一个返回一个命名列表的函数.在命名空间中这里有这个函数的一些东西你可以看到(它返回的组件),还有一些对象你无法看到(在函数中被创建但是没有返回的).一个命名空间输出了一个或者多个对象,这些是可见的,但是或许还有一些对象时私有的.

查看一个特定命名空间的对象可以使用 ’ :: ‘ 操作:

> stats::coef
function (object, ...)
UseMethod("coef")
<environment: namespace:stats>  

如果这个名字没有被输出那么这个操作就会失败:

> stats::coef.default
Error: ’coef.default’ is not an exported object
from ’namespace:stats’

这里也有方法去获得没有被输出对象的信息,但是你得答应除了看看之外不能使用它们.你可以使用’ ::: ‘或者getAnywhere():

> stats:::coef.default
function (object, ...)
object$coefficients
<environment: namespace:stats>
> getAnywhere(’coef.default’)
A single object matching ’coef.default’ was found
It was found in the following places
registered S3 method for coef from namespace stats
namespace:stats
with value
function (object, ...)
object$coefficients
<environment: namespace:stats>

如果你想修改命名空间的一个函数就会有一些问题.这种情况下,assignInNamespace()和unlockBinding()将会是有用的.

命名空间,S3方法,尤其是S4方法的存在使R对于大的复杂的应用比用它的其他方式要更加合适.但R并不是对于任何应用都是最好的工具.它也没有努力去这样做.R的一个设计理想是使R和其他软件的交互更加方便以使每个任务都会得到最好的工具.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值