将df列名称传递给图形打印功能中的嵌套方程式

时间:2017-02-07 04:12:51

标签: r function dataframe plot

我需要对Passing a data.frame column name to a function

上的主要帖子做一些澄清

我需要创建一个函数,它将testSet,trainSet和colName(也称为预测器)作为输入函数的输入,该函数使用GAM模型趋势线打印数据集的图。

我遇到的问题是:

 plot.model = function(predictor, train, test) {
      mod = gam(Response ~ s(train[[predictor]], spar = 1), data = train)
      ...
 }

 #Function Call
 plot.model("Predictor1", 1.0, crime.train, crime.test)

我不能简单地将预测变量作为字符串传递给gam函数,但我也不能使用字符串来索引数据帧值,如上面的链接所示。不知何故,我需要将colName键传递给游戏功能。有关绘图的其他类似方案中会出现此问题。

 plot <- ggplot(data = test, mapping = aes(x=predictor, y=ViolentCrimesPerPop))

同样,我无法为列名传递字符串值,也无法传递列值。

是否有人针对这些情况采用通用解决方案。如果答案被隐藏在上述链接中,我深表歉意,但我不清楚它是否存在。

注意:正在运行的gam函数调用如下所示:

mod = gam(Response ~ s(Predictor1, spar = 1.0), data = train)

列车集是一个列名为“响应”的数据框。 “预测器”。

1 个答案:

答案 0 :(得分:1)

将列名称作为字符串传递时,请使用aes_string代替aes

plot <- ggplot(data = test, mapping = aes_string(x=predictor, y=ViolentCrimesPerPop))

对于gam函数::从gam函数文档复制的示例。我用过矢量,标量更容易。它仅使用带有paste参数的collapse

library(mgcv)
set.seed(2) ## simulate some data... 
dat <- gamSim(1,n=400,dist="normal",scale=2)

# String manipulate for formula
formula <- as.formula(paste("y~s(", paste(colnames(dat)[2:5], collapse = ")+s("), ")", sep =""))
b <- gam(formula, data=dat)

相同
b <- gam(y~s(x0)+s(x1)+s(x2)+s(x3),data=dat)