Как запустить подмножество фрейма данных через функцию R? - PullRequest
1 голос
/ 29 мая 2020

Я пытаюсь настроить функцию, которая запускает регрессионный анализ выбранных переменных (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)
}

1 Ответ

1 голос
/ 29 мая 2020

Скорее всего, в вашем окружении плавают 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  
...