动态类型
因为 R 中的函数不是强类型的,所以它可以非常灵活。换句话说,在调用函数之前,
输入对象的类型是不固定的。即使函数的最初设计是针对标量运算,当将函数“+”作用到
向量上时,它也会自动拓展以适用于向量运算。例如,我们可以运行以下代码,而不必对
函数做任何其他修改:
add(c(2, 3), 4)
## [1] 6 7
上面这个例子没有真正展示出动态类型的灵活性,因为在 R 中标量也是一个向量(长
度为 1)。举一个更具有代表性的例子:
add(as.Date("2014-06-01"), 1)
## [1] "2014-06-02"
无需检查输入类型,函数便可以将两个参数代入表达式中进行运算。其中,as.Date( )
创建了一个 Date 对象,用来表示日期。这里没有对“add”函数进行任何更改,它就可以
完美地作用于对象 Date。只有在两个参数上“+”没有被很好地定义时,函数才会失效。
add(list(a = 1), list(a = 2))
## Error in x + y: 二进列运算符中有非数值参数