更改操作员默认行为

时间:2015-03-12 12:28:15

标签: 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

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

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

> 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"

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

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

1 个答案:

答案 0 :(得分:0)

添加。大卫是正确的。在合理的代码中,我在函数的入口处或至少在结尾处检查这种事情:

    require(testthat)
    expect_equal(length(out), length (mainEntry))

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

    X[1] <- as.numeric("a")

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

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