ggplot2在函数内部失败

时间:2014-11-15 19:25:17

标签: r ggplot2

我在尝试用ggplot()编写一些函数时遇到了麻烦。

这是我尝试做的简化版本。 这按预期工作:

testdata <- matrix(1:10, 
                   nrow = 5)
ggplot() + geom_point(aes(testdata[,1], 
                          testdata[,2]))

在函数中输入相同的代码:

mygg <- function(data){
  ggplot() + geom_point(aes(data[,1], 
                            data[,2]))
}
mygg(testdata)  

给出错误:

Error in data[, 1] : object of type 'closure' is not subsettable

当我用aes替换aes_string时,只会绘制矩阵的第一行。

当我重命名我的矩阵&#39;数据时,它确实有用,但重点是我想绘制一堆不同名称的矩阵。

我已尽最大努力搜索论坛,并意识到我的问题基本上是重复的,但我完全无法找到解决方案。

1 个答案:

答案 0 :(得分:2)

我玩了一会儿,发现你需要在aes()方法中使用变量名。另外,我将矩阵强制转换为数据框,因为ggplot也抱怨过。

复制问题,显示导致解决方案的输出。

> mygg(testdata)
Error in data[, 1] : object of type 'closure' is not subsettable
> testdata
  V1 V2
1  1  6
2  2  7
3  3  8
4  4  9
5  5 10
> testdata <- matrix(1:10, nrow = 5)
> testdata <- as.data.frame(testdata)
> mygg <- function(data){
+   ggplot(data) + geom_point(aes(x = V1, y = V2))
+ }
> mygg(testdata)
> # outputs the plot

更漂亮的代码

library('ggplot2')
testdata <- matrix(1:10, nrow = 5)
testdata <- as.data.frame(testdata)
mygg <- function(data){
  ggplot(data) + geom_point(aes(x = V1, y = V2))
}
mygg(testdata)

一般情况下,您希望使您的功能足够灵活,以便考虑变量名称(可能使用names()功能)。