如何通过R函数运行一个数据框架的子集?

问题描述 投票:0回答:1

我试图设置一个函数,从我的主数据框架的一个特定子集对选择的变量(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)
}
r function subset
1个回答
1
投票

最有可能的是你有 data.var1data.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  
© www.soinside.com 2019 - 2024. All rights reserved.