Hi, Suppose I have a vector: > names.select [1] "Idd13" "Idd14" "Idd8.12" "Idd7" automatically generated by some selection criteria. Now, if I have a data frame with many variables, of which the variables in "names.select" are also variables from the data frame. e.g. > all.df[1:5,] Mouse Idd5 Idd6.19.20 Idd13 Idd14 Idd8.12 Idd3.10.17.18 Idd9 1 904 F1 NOD NOD F1 NOD F1 NOD 2 934 NOD F1 F1 F1 F1 NOD NOD 3 950 NOD NOD F1 NOD F1 F1 NOD 4 977 F1 NOD NOD F1 F1 F1 F1 5 1050 F1 F1 NOD NOD NOD NOD F1 Idd15 Idd7 Idd2 Aire Idd4 Idd21 Cross 1 F1 NOD NOD NOD NOD NOD 1 2 NOD NOD F1 F1 NOD F1 1 3 NOD NOD F1 F1 NOD NOD 1 4 NOD F1 NOD NOD NOD NOD 1 5 NOD F1 F1 F1 NOD F1 1 If I want to use the information from names.select to fit a glm() on Cross, I can do something like: > one.glm2 <- glm(eval(substitute(Cross ~ x1 + x2 + x3 + x4, + list(x1 = as.name(names.select[1]), + x2 = as.name(names.select[2]), + x3 = as.name(names.select[3]), + x4 as.name(names.select[4])))), + data = all.df, family = binomial) which does exactly what I want. However, this is kind of inefficient as if my selection criteria change, the variables being selected in names.select may change and it will make my eval() from one.glm2 invalid. Is there a way to solve this? e.g. if names.select has got 5 elements then I'd want to fit something like: one.glm2 <- glm(eval(substitute(Cross ~ x1 + x2 + x3 + x4 + x5, list(x1 = as.name(names.select[1]), x2 = as.name(names.select[2]), x3 = as.name(names.select[3]), x4 = as.name(names.select[4]), x5 = as.name(names.select[5])))), data = all.df, family = binomial) (What I'm doing is writing a function which let's the user determine a selection criteria, hence names.select will be unknown -- and so far I'm very puzzled about how I can then use the information in names.select into my one.glm2...*_*. Cheers, Kevin -------------------------------- Ko-Kang Kevin Wang PhD Student Centre for Mathematics and its Applications Building 27, Room 1004 Mathematical Sciences Institute (MSI) Australian National University Canberra, ACT 0200 Australia Homepage: http://wwwmaths.anu.edu.au/~wangk/ Ph (W): +61-2-6125-2431 Ph (H): +61-2-6125-7407 Ph (M): +61-40-451-8301
glm( Cross ~., all.df[,c("Cross", names.select)], family = binomial) --- From: Kevin Wang <Kevin.Wang at maths.anu.edu.au> Hi, Suppose I have a vector:> names.select[1] "Idd13" "Idd14" "Idd8.12" "Idd7" automatically generated by some selection criteria. Now, if I have a data frame with many variables, of which the variables in "names.select" are also variables from the data frame. e.g.> all.df[1:5,]Mouse Idd5 Idd6.19.20 Idd13 Idd14 Idd8.12 Idd3.10.17.18 Idd9 1 904 F1 NOD NOD F1 NOD F1 NOD 2 934 NOD F1 F1 F1 F1 NOD NOD 3 950 NOD NOD F1 NOD F1 F1 NOD 4 977 F1 NOD NOD F1 F1 F1 F1 5 1050 F1 F1 NOD NOD NOD NOD F1 Idd15 Idd7 Idd2 Aire Idd4 Idd21 Cross 1 F1 NOD NOD NOD NOD NOD 1 2 NOD NOD F1 F1 NOD F1 1 3 NOD NOD F1 F1 NOD NOD 1 4 NOD F1 NOD NOD NOD NOD 1 5 NOD F1 F1 F1 NOD F1 1 If I want to use the information from names.select to fit a glm() on Cross, I can do something like:> one.glm2 <- glm(eval(substitute(Cross ~ x1 + x2 + x3 + x4,+ list(x1 = as.name(names.select[1]), + x2 = as.name(names.select[2]), + x3 = as.name(names.select[3]), + x4 as.name(names.select[4])))), + data = all.df, family = binomial) which does exactly what I want. However, this is kind of inefficient as if my selection criteria change, the variables being selected in names.select may change and it will make my eval() from one.glm2 invalid. Is there a way to solve this? e.g. if names.select has got 5 elements then I'd want to fit something like: one.glm2 <- glm(eval(substitute(Cross ~ x1 + x2 + x3 + x4 + x5, list(x1 = as.name(names.select[1]), x2 = as.name(names.select[2]), x3 = as.name(names.select[3]), x4 = as.name(names.select[4]), x5 = as.name(names.select[5])))), data = all.df, family = binomial) (What I'm doing is writing a function which let's the user determine a selection criteria, hence names.select will be unknown -- and so far I'm very puzzled about how I can then use the information in names.select into my one.glm2...*_*.