r - 在用户定义的函数中调用 glm() 函数
问题描述
我一直在尝试创建一个在其中使用 glm() 的函数。但我总是收到一条错误消息。看起来该函数没有检索变量的值。
set.seed(234)
sex <- sample(c("M", "F"), size=100, replace=TRUE)
age <- rnorm(n=100, mean=20 + 4*(sex=="F"), sd=0.1)
dsn <- data.frame(sex, age)
rm(sex, age) #remove sex and age from the global environment for reproducibility
to_analyze <- function(dep, indep, data){
glm(dep~factor(indep), data=data)
}
to_analyze(dep=age, indep=sex, data=dsn)
#> Error in eval(predvars, data, env): object 'age' not found
解决方案
您可以使用以下任何一种:
使用
substitute
:
to_analyze <- function(dep, indep, data){
glm(substitute(dep ~ factor(indep)), data=data)
}
to_analyze(dep=age, indep=sex, data=dsn)
优点:可以独立写成公式。
例如
to_analyze(Petal.Width, Sepal.Length + Sepal.Width, data = iris)
to_analyze <- function(dep, indep, data){
glm(reformulate(sprintf("factor(%s)",indep), dep), data = data)
}
请注意,要调用此函数,变量应该是字符类型
to_analyze(dep= "age", indep="sex", data=dsn)
Recall
glm
还可以采用可以解析为公式的字符串:
to_analyze <- function(dep, indep, data){
glm(sprintf("%s~factor(%s)", dep, indep), data = data)
}
to_analyze("age", "sex", data=dsn)
甚至:
to_analyze <- function(dep, indep, data){
glm(paste(dep,"~ factor(",indep,")"), data = data)
}
to_analyze("age", "sex", data=dsn)
最后:结合替代品和粘贴:
to_analyze <- function(dep, indep, data){
glm(paste(substitute(dep),"~ factor(",substitute(indep),")"), data = data)
}
适用于符号和字符。例如:
to_analyze(age, sex, data=dsn)
to_analyze("age", "sex", data=dsn)
推荐阅读
- java - IntelliJ IDEA 不索引 GraalVM 库
- django-rest-framework - Django-rest-framework filter_queryset() 接受 3 个位置参数,但给出了 4 个
- node.js - 我的随机图像机器人尝试从主文件夹而不是指定文件夹中提取图像
- javascript - 在 Asp.Net C# 中使用 javascript 拆分多行文本框值
- javascript - 如何计算 Javascript 中图像的点击次数?
- algorithm - 具有 n 变量和范围的解决方案丢番图方程
- python - 为什么这个语句在 python 3.0 中是错误的?
- android - Android Studio 4.1调试断点不起作用
- wordpress - 在 Woocommerce 中隐藏特定类别档案中的缺货产品
- azure-storage - Azure 存储帐户(经典)- 仅使用帐户名称访问?