【发布时间】:2016-05-31 08:28:47
【问题描述】:
我是 R 新手,并且一直在尝试解决这个问题。基本上,我有一个数据框和各种y 变量。我正在尝试编写一个函数,它允许我为我拥有的许多不同的y 变量提供一个自定义的图形模板。我正在尝试下面的代码,但遇到了这个错误:
1:在 eval(expr, envir, enclos) 中:强制引入的 NAs
2: 在 aes_string(xvar[max(which(complete.cases(yvar)))], yvar[max(which(complete.cases(yvar)))], : 强制引入的 NAs
如果我直接添加变量而不是通过函数,代码就可以工作。我相信这与函数如何将xvar 插入as.numeric() 函数有关。我不确定,但你们中的任何人都知道如何处理这个问题吗?
test <- function (Data, xvar, yvar){
# Plot data
plot <- ggplot(subset(Data,!is.na((yvar))), aes_string(xvar, yvar)) + geom_line(colour="darkblue") + theme_bw()
# Add Trendline for recent data
plot <- plot + geom_smooth(data=subset(Data, xvar > as.numeric(xvar)[max(which(complete.cases(yvar)))-8]), method = "lm")
# Label most recent data
plot + geom_text(data = Data, aes_string(xvar[max(which(complete.cases(yvar)))],
yvar[max(which(complete.cases(yvar)))],
label = as.numeric(yvar)[max(which(complete.cases(yvar)))],
hjust= -0.5, vjust = 0.5))
【问题讨论】:
-
aes_string需要一个字符串。xvar[max(which(complete.cases(yvar)))在那里没有意义。在 ggplot2 之外计算。另外,不要在函数内部使用subset。它的文档对此提出了警告。 -
非常感谢!我明白你的意思了!