对于这个论坛的某些成员来说,这个问题将是一个简单问题,但是我花了很多时间来寻找答案,但没有找到任何可行的答案。 让我澄清一下:我有一个进行线性回归的简单函数,结果成为变量,并且将此变量分配给全局环境。简单的方法。
但是,每次我运行此函数时,都会替换变量,这是我不需要的变量。 我只想定义一个特定的名称,而不是替换此变量。
请查看此代码以了解我的问题:
set.seed(123)
ds <- data.frame(income=rnorm(1000,700,20), sex=c(0,1), age=rnorm(1000,30,10))
regress <- function(iv_string) {
regression_formula <- as.formula(paste("income ~", iv_string))
results <<- lm(regression_formula, ds)
plot(results)
print(results)
}
regress("age")
regress("sex")
类似的东西
regress <- function(iv_string, **custom_name**) {
regression_formula <- as.formula(paste("income ~", iv_string))
results[**custom_name**] <<- lm(regression_formula, ds)
plot(results)
print(results)
}
regress("sex","sex_on_income") #this model will be used in other analysis, once it will be assigned at global environment
regress("age","age_on_income") #this model will be used !!
答案 0 :(得分:2)
这会将lm
对象写到env
指定的父框架或其他环境中,进行打印,打印并无形地返回。另外,我们确保公式的环境为env
,这允许iv_string引用env
中的对象以及ds
中的列。 (如果我们知道iv_string
仅引用了ds
中的列名,那么我们可以仅使用fo <- paste("income ~", iv_string)
,因为lm
将接受字符串作为公式。)我们使用{{1 }},以确保do.call(...)
输出显示的是实际公式,而不仅仅是lm
。我们使用父框架作为fo
的默认框架,这种情况更为常见,但是如果您确实希望默认框架为全局环境,请用env
或parent.frame()
替换.GlobalEnv
。
globalenv()
给予:
regress <- function(iv_string, custom_name = iv_string, env = parent.frame()) {
fo <- as.formula(paste("income ~", iv_string), env)
env[[custom_name]] <- results <- do.call("lm", list(fo, quote(ds)))
plot(results)
print(results)
invisible(results)
}
regress("age", "lm_age")
也就是说,R中的常规样式不是将对象写到父框架或全局环境中,而是将它们返回:
Call:
lm(formula = income ~ age, data = ds) <-- note that formula shows, not just fo
Coefficients:
(Intercept) age
695.1540 0.1699
答案 1 :(得分:1)
这是您的代码的修改版本,我认为会为您提供所需的内容。
regress <- function(iv_string, custom_name) {
regression_formula <- as.formula(paste("income ~", iv_string))
assign(custom_name, lm(regression_formula, ds), envir = .GlobalEnv)
plot(get(custom_name))
print(get(custom_name))
}
regress("age", "age_reg")
在上面的代码中,我assign
回归到由字符串custom_name
定义的全局变量。对于plot
和print
语句,我使用get
获取该字符串中命名的变量并将其传递给那些函数。因此,在我的示例中,它将创建图表并打印结果,并且名为age_reg
的变量将出现在全局环境中并包含回归结果。