【发布时间】:2021-01-04 22:02:24
【问题描述】:
我有一个 df,我想做一个带有标题名称的函数并返回线性模型。
我正在尝试这个:
a <- function(j,k){
reg1 <- lm(data$j ~ data$k)
summary(reg1)
}
a(j="hour",k="score")
'data$j' 为 NULL
【问题讨论】:
标签: r string function dataframe
我有一个 df,我想做一个带有标题名称的函数并返回线性模型。
我正在尝试这个:
a <- function(j,k){
reg1 <- lm(data$j ~ data$k)
summary(reg1)
}
a(j="hour",k="score")
'data$j' 为 NULL
【问题讨论】:
标签: r string function dataframe
试试这个。如果您打算使用作为数据帧中的变量的字符串,最好使用[[]] 在函数中调用它们。这里是你的函数的代码有轻微的变化:
a <- function(j,k){
reg1 <- lm(data[[j]] ~ data[[k]])
summary(reg1)
}
a(j="hour",k="score")
还有一个使用iris 数据集的小例子:
#Example
data=iris
#Code
a(j="Sepal.Length",k="Petal.Length")
如果需要,您可以进一步调整您的函数a。
【讨论】:
当将列名作为变量传递时,您不能使用$。您可以通过以下几种方式执行此操作。
a <- function(data, j,k){
reg1 <- lm(reformulate(k, j), data = data)
summary(reg1)
}
lm 也接受公式作为字符串,因此您不一定需要将其转换为公式对象。a <- function(data, j,k){
reg1 <- lm(sprintf('%s~%s', j, k), data = data)
summary(reg1)
}
你可以这样称呼它:
a(mtcars, 'mpg', 'cyl')
#Call:
#lm(formula = sprintf("%s~%s", j, k), data = data)
#Residuals:
# Min 1Q Median 3Q Max
#-4.9814 -2.1185 0.2217 1.0717 7.5186
#Coefficients:
# Estimate Std. Error t value Pr(>|t|)
#(Intercept) 37.8846 2.0738 18.27 < 2e-16 ***
#cyl -2.8758 0.3224 -8.92 6.11e-10 ***
#---
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#Residual standard error: 3.206 on 30 degrees of freedom
#Multiple R-squared: 0.7262, Adjusted R-squared: 0.7171
#F-statistic: 79.56 on 1 and 30 DF, p-value: 6.113e-10
请注意,我在函数中添加了data 作为附加参数。在函数中传递数据对象而不是依赖它在全局环境中进行评估通常是一种更好的做法。
【讨论】: