我在尝试用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;数据时,它确实有用,但重点是我想绘制一堆不同名称的矩阵。
我已尽最大努力搜索论坛,并意识到我的问题基本上是重复的,但我完全无法找到解决方案。
答案 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()
功能)。