我想我在使用 transformBy() 时遇到了范围界定错误,transformBy() 是 R 的 doBy 包的一部分。这是一个简单的问题示例:
> library(doBy)
>
> test.data = data.frame(
+ herp = c(1,2,3,4,5),
+ derp = c(2,3,1,3,5)
+ )
>
> transformData = function(data){
+
+ five = 5
+
+ transformBy(
+ ~ herp,
+ data=data,
+ sum=herp + derp + five
+ )
+ }
>
> transformData(test.data)
Error in eval(expr, envir, enclos) : object 'five' not found
当我在子作用域(非全局作用域)内运行 transformBy() 时,似乎没有局部变量或函数可用于 transformBy。另一方面,如果我全局定义这些变量或函数,它们就可用了。这是一个稍微修改过的有效示例:
> library(doBy)
>
> test.data = data.frame(
+ herp = c(1,2,3,4,5),
+ derp = c(2,3,1,3,5)
+ )
>
> five = 5
>
> transformData = function(data){
+ transformBy(
+ ~ herp,
+ data=data,
+ sum=herp + derp + five
+ )
+ }
>
> transformData(test.data)
herp derp sum
1 1 2 8
2 2 3 10
3 3 1 9
4 4 3 12
5 5 5 15
我是不是误解了 transformBy 应该如何工作或者是什么东西坏了?
版本:
- Ubuntu:8.04 (x64)
- R: 2.10.1
- doBy:4.0.5
最佳答案
这在 ?transformBy 帮助页面中有明确记录,因此 不是错误。
详细信息:
The ... arguments are tagged vector expressions, which are
evaluated in the data frame data. The tags are matched against
names(data), and for those that match, the value replace the
corresponding variable in data, and the others are appended to
data.
简单地使对象“五”成为data.frame“数据”的一部分,并且 它会按你预期的那样工作。目前该功能正在尝试 评估“数据”data.frame 中的“五”,这当然会失败。
关于R(统计)范围错误使用 transformBy(),doBy 包的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3742415/