如果我在自定义函数下调用geom_hline或geom_vline,它一直面临问题,它从矢量中获取值。它似乎工作正常,直到我在该函数body.e.g中添加facet_grid() 无功能
c<- data.frame(A = c("carr","bike","truck","carr","truck","bike","bike","carr","truck","carr","truck","truck","carr","truck","truck"),
B = c(10,20,30,23,45,56,78,44,10,20,30,10,20,30,67),
D = c(1,2,3,1,2,3,2,3,2,3,2,2,3,2,1))
a = c(1:4)*4
ggplot(c, aes(A,B, color = D))+
geom_point()+
facet_grid( .~D)+
geom_hline(yintercept = a,linetype = "dotted",size =0.3)
`
但功能
tk_fun <- function(dat,x1,y1,clr){ # I need to have this a declared and defined with in function.
a = c(1:4)*4.5 p <- ggplot(dat, aes_string(colnames(dat)[1],colnames(dat)[2], color = colnames(dat)[3]))+
geom_point()+ facet_grid( .~dat[,3])+
geom_hline(yintercept = a,linetype = "dotted",size =0.3) return(p) } tk_fun(c,"A","B","D")
使用功能我收到此错误:
$<-.data.frame
中的错误(*tmp*
,“PANEL”,值= c(1L,2L,3L,1L,: 替换有15行,数据有4行 我希望有人可以帮助我搞清楚,如何通过功能来做,没有错误。感谢
答案 0 :(得分:2)
问题在于您对方面的定义。您需要使用正确的变量名称创建适当的公式调用,而不是直接使用数据。使用paste
和as.formula
可以提供帮助。
tk_fun <- function(dat,x1,y1,clr){ # I need to have this a declared and defined with in function.
a = c(1:4)*4.5
p <- ggplot(dat, aes_string(colnames(dat)[1],colnames(dat)[2], color = colnames(dat)[3]))+
geom_point() +
facet_grid(as.formula(paste('. ~', names(dat)[3]))) +
geom_hline(yintercept = a, linetype = "dotted", size =0.3)
return(p)
}