R: en indiquant le nom de la variable en paramètre de la fonction pour une fonction de général (universel) utilisation

Voici ma petite fonction et les données. Veuillez noter que je veux concevoir une fonction non usage personnel pour un usage général.

dataf <- data.frame (A= 1:10, B= 21:30, C= 51:60, D = 71:80)

myfun <- function (dataframe, varA, varB) {
              daf2 <- data.frame (A = dataframe$A*dataframe$B, 
              B= dataframe$C*dataframe$D)
              anv1 <- lm(varA ~ varB, daf2)
              print(anova(anv1)) 
             }             

myfun (dataframe = dataf, varA = A, varB = B)

Error in eval(expr, envir, enclos) : object 'A' not found

Il travaille quand je veux spécifier les données de la variable$nom, mais je ne veux pas faire un tel cahier des charges afin qu'il demande à l'utilisateur d'écrire à la fois les données et le nom de la variable dans la fonction.

 myfun (dataframe = dataf, varA = dataf$A, varB = dataf$B)
Analysis of Variance Table

Response: varA
          Df Sum Sq Mean Sq    F value    Pr(>F)    
varB       1   82.5    82.5 1.3568e+33 < 2.2e-16 ***
Residuals  8    0.0     0.0                         
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1 
Warning message:
In anova.lm(anv1) :
  ANOVA F-tests on an essentially perfect fit are unreliable

quelles sont les meilleures pratiques dans cette situation? puis-je mettre fixez le dataframe l'intérieur de la fonction? quels pourraient être les inconvénients ou les conflits potentiels /dangers pour le faire? Voir la masqués déclaration de sortie. Je crois que une fois qu'il est attaché restera annexée rappel de la session de droit? La fonction fournie ici est tout simplement l'exemple, j'ai besoin de plus d'analyse en aval, où les noms de variables de différents dataframe peuvent /doivent être identiques. Je suis dans l'attente d'un programmeur solution sur ce point.

myfun <- function (dataframe, varA, varB) {
              attach(dataframe)
                 daf2 <- data.frame (A = A*B, B= C*D)
              anv1 <- lm(varA ~ varB, daf2)
              return(anova(anv1))
             }             

myfun (dataframe = dataf, varA = A, varB = B)

The following object(s) are masked from 'dataframe (position 3)':

    A, B, C, D
Analysis of Variance Table

Response: varA
          Df Sum Sq Mean Sq    F value    Pr(>F)    
varB       1   82.5    82.5 1.3568e+33 < 2.2e-16 ***
Residuals  8    0.0     0.0                         
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1 
Warning message:
In anova.lm(anv1) :
  ANOVA F-tests on an essentially perfect fit are unreliable

OriginalL'auteur jon | 2011-11-14