我需要对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)
列车集是一个列名为“响应”的数据框。 “预测器”。
答案 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)