更改操作员默认行为

gap*_*ppy 5 r

R的默认行为的设计决策是针对交互式使用进行微调的,但是在大型代码库中运行时可能会导致不希望的行为而没有太多的用户监督.我有兴趣找到使语言更严格的方法.我有两个基本的例子.

(回收)非一致性载体在芳基化操作中循环使用:

> x=1:10
> y=1:20
> y=rep(1,20)
> x+y
 [1]  2  3  4  5  6  7  8  9 10 11  2  3  4  5  6  7  8  9 10 11
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个操作导致错误?

(转换)更新向量时会发生转换,有时会更改要更新的元素的类型,有时会更改向量的类型:

> x[1] <- 'a'
> x
 [1] "a"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"
> x[1] <- 1
> x
 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个操作导致错误?

我相信新用户和中级用户的许多挫折源于这些行为(这反过来导致对语言的总结判断!).任何指向解决回收和转换的一般方法的指针都非常受欢迎.

cmb*_*rbu 0

为了补充。大卫说得对。在合理的代码中,我在函数的入口处或至少在函数的末尾检查此类事情:

    require(testthat)
    expect_equal(length(out), length (mainEntry))
Run Code Online (Sandbox Code Playgroud)

转换也是一个非常敏感的问题。在重要的代码中,我在作业中指定了类型:

    X[1] <- as.numeric("a")
Run Code Online (Sandbox Code Playgroud)

会提出警告。您甚至可以使用S4 类定义防止转换的类。

不幸的是,对于初学者来说,这可能不太容易理解,但初学者是否应该处理关键代码呢?