我试图设置一个函数,从我的主数据框架的一个特定子集对选择的变量(data.var1,data.var2)进行回归分析,但无论我是在函数内部还是外部定义子集,该函数都是在整个数据框架上运行,而不仅仅是我想要的子集。
#Function subsetting data by temp and running regression
varReg21C <- function(data.var1,data.var2) {
data21C <- subset(allPursuit,allPursuit$temp == 21)
fitData <- lm(data.var1 ~ data.var2, data21C)
regData <- summary(fitData)
anovaData <- anova(fitData)
reg21C <- list(fitData=fitData,regData=regData,anovaData=anovaData)
}
#OR
#Function running regression on data already in subset
data21C <- subset(allPursuit,allPursuit$temp == 21)
data21C
data25C <- subset(allPursuit,allPursuit$temp == 25)
data25C
data29C <- subset(allPursuit,allPursuit$temp == 29)
data29C
varReg21C <- function(data.var1,data.var2) {
fitData <- lm(data.var1 ~ data.var2, data21C)
regData <- summary(fitData)
anovaData <- anova(fitData)
reg21C <- list(fitData=fitData,regData=regData,anovaData=anovaData)
}
最有可能的是你有 data.var1
和 data.var2
浮动在你的环境中。你需要定义所有的输入,并防止直接从环境中读取,所以如果我们这样写。
varReg <- function(data.var1,data.var2,DataFrame,TempChoice) {
data <- subset(DataFrame,temp == TempChoice)
Form <- paste(data.var1,"~",data.var2)
fitData <- lm(Form, data)
regData <- summary(fitData)
anovaData <- anova(fitData)
return( list(fitData=fitData,regData=regData,anovaData=anovaData))
}
allPursuit = data.frame(x=runif(100),y=runif(100),z=runif(100),
temp=sample(c(21,25,29),100,replace=TRUE))
varReg("x","y",allPursuit,21)[[1]]
Call:
lm(formula = Form, data = data)
Coefficients:
(Intercept) y
0.3126 0.1494
varReg("x","y",allPursuit,25)[[1]]
Call:
lm(formula = Form, data = data)
Coefficients:
(Intercept) y
0.55069 0.01734