【发布时间】:2011-04-15 16:02:15
【问题描述】:
我尝试在自己编写的函数中使用reshape2 中的acast,但遇到了问题,即 acast 没有找到我发送给它的数据。
这是我的数据:
library("reshape2")
x <- data.frame(1:3, rnorm(3), rnorm(3), rnorm(3))
colnames(x) <- c("id", "var1", "var2", "var3")
y <-melt(x, id = "id", measure = c("var1", "var2", "var3"))
y 然后看起来像这样:
id variable value
1 1 var1 0.1560812
2 2 var1 1.0343844
3 3 var1 -1.4157728
4 1 var2 0.8808935
5 2 var2 0.1719239
6 3 var2 0.6723758
7 1 var3 -0.7589631
8 2 var3 1.1325995
9 3 var3 -1.5744876
现在我可以通过acast 将其回退:
> acast(y,y[,1] ~ y[,2])
var1 var2 var3
1 0.1560812 0.8808935 -0.7589631
2 1.0343844 0.1719239 1.1325995
3 -1.4157728 0.6723758 -1.5744876
但是,当为 acast 编写一个应该做同样事情的小包装器时,我收到一条愚蠢的错误消息:
wrap.acast <- function(dat, v1 = 1, v2 = 2) {
out <- acast(dat, dat[,v1] ~ dat[,v2])
return(out)
}
wrap.acast(y)
Error in eval(expr, envir, enclos) : object 'dat' not found
问题显然与环境和全局/局部变量等有关。因为它在全局环境中声明 dat 后会给出其他错误消息(即,只要它们不是全局的,就找不到 v1 和 v2)。
我想在函数内使用 resahpe(尤其是 acast),而无需在函数外声明变量。有什么诀窍?
谢谢。
【问题讨论】:
-
这是最近比较常见的问题。我最初发现它是 S4 方法的问题,但显然它也可能与其他功能一起出现。这应该是 R 中的一个错误,另请参阅此问题的答案:stackoverflow.com/questions/3574858/…
-
谢谢乔里斯。但现在我的印象是,我的问题没有简单的解决方案。不太好...
-
刚刚发现实际上有一个。这是正确类型转换的问题。
标签: r function global-variables local-variables reshape