dapengde 因为 R 就是这么松散的语言,或者严格的说,是 R 的核心开发者就是这么任性:他们在初期创造了一些看似自由而不严谨的东西,等过了一些年他们学乖了之后,开始转向用严谨替代自由,其实这种朝着严谨方向的挣扎有时候是无谓的,你不能说他对,也不能说他错,取决于你的价值观,严谨不绝对好,自由也不绝对好,比如德国开高速不限速,也不见得交通事故比多数限速的国家就多出几个数量级。每当遇到这种情况,你可以再回忆一遍这句话:R 是统计学家写给统计学家的编程语言。
回到这个具体的例子,if (长度大于1的向量)
这样的语句该怎样执行没有确定的答案(还是那句话,报错、警告、用第一个元素都可以是对的答案)。R 作为一门语言跟别的语言比起来可能最大的问题就是它没有语言规范(比如 HTML、JavaScript 都有具体设计规范),别的语言通常是规范和实现分开,而且先有规范,再有具体实现(甚至可能有多种实现,比如各个浏览器自己去实现如何运行 JavaScript)。没有规范带来的后果就是很多问题没有答案,我们不知道在某些情况下应该怎样做。
我个人是支持在这个情况下报错的,因为 if ()
应该接受的就只能是单值,如果传进来一个向量,我猜多半是用户搞错了,而不是故意传进来的。问题只是 R 核心开发者的这个决定做得有点太晚了。太晚的决定带来的麻烦跟原本错误却通行的规则带来的麻烦二者比起来,很难说哪个麻烦更大。如果 R 还能再活五十年,那自然是要把错误的规则改掉。如果五年后就被灭掉了,那就不值得在这种细枝末节的问题上纠结了。