gpt4 book ai didi

r - 如何在 R 的函数中使用 acast (reshape2)?

转载 作者:行者123 更新时间:2023-12-04 10:58:07 29 4
gpt4 key购买 nike

我尝试使用 acast来自 reshape2在自己编写的函数中,但有一个问题,即 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 后给出了其他错误消息在全局环境中(即, v1v2 只要它们不是全局的就不会被发现)。

我想在函数内使用 resahpe(尤其是 acast),而无需在函数外声明变量。诀窍是什么?

谢谢。

最佳答案

而不是使用公式规范,使用字符规范:

acast(y, list(names(y)[1], names(y)[2]))

关于r - 如何在 R 的函数中使用 acast (reshape2)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3768417/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com