[datatable-help] what's wrong with my quote()-ing

Paul Johnson pauljohn32 at gmail.com
Mon Mar 10 02:18:38 CET 2014


Hi

I've been using data.table only 1 week. Some of the idioms still have me
befuddled.  I'm finding some things that work, and I don't understand why.
That's bad, but more frustrating, I have usages that seem good, but fail.
I manage the aggregation on subsets parts more easily than the seemingly
easier chores where I want to treat this as a data frame.

In this example, accounts is a huge data.table with 41,000 lines, I'm
pasting in a little dump of a few lines below, if it gives you enough to
test.

## This works:
library(gmodels)
temp1 <- quote(east2a)
temp2 <- quote(east2b.1)
accounts[ , CrossTable(eval(temp1), eval(temp2), expected = FALSE,
prop.chisq = FALSE, prop.c = FALSE)]


## why does this not work?
i <- "east2a"
temp1 <- quote(paste(i))
temp2 <- quote(paste0("east2b.", 1))
accounts[ , CrossTable(eval(temp1), eval(temp2), expected = FALSE,
prop.chisq = FALSE, prop.c = FALSE)]

Here's what happens when I run that:

> library(gmodels)
> temp1 <- quote(east2a)
> temp2 <- quote(east2b.1)
> accounts[ , CrossTable(eval(temp1), eval(temp2), expected = FALSE,
prop.chisq = FALSE, prop.c = FALSE)]


   Cell Contents
|-------------------------|
|                       N |
|           N / Row Total |
|         N / Table Total |
|-------------------------|


Total Observations in Table:  41052


             | east2b.1
      east2a |       Yes |        No | Row Total |
-------------|-----------|-----------|-----------|
         Yes |      9703 |      3051 |     12754 |
             |     0.761 |     0.239 |     0.311 |
             |     0.236 |     0.074 |           |
-------------|-----------|-----------|-----------|
          No |      7957 |     20341 |     28298 |
             |     0.281 |     0.719 |     0.689 |
             |     0.194 |     0.495 |           |
-------------|-----------|-----------|-----------|
Column Total |     17660 |     23392 |     41052 |
-------------|-----------|-----------|-----------|


       t  prop.row  prop.col   prop.tbl
1:  9703 0.7607809 0.5494337 0.23635876
2:  7957 0.2811859 0.4505663 0.19382734
3:  3051 0.2392191 0.1304292 0.07432037
4: 20341 0.7188141 0.8695708 0.49549352
> i <- "east2a"
> temp1 <- quote(paste(i))
> temp2 <- quote(paste0("east2b.", 1))
>  eval(temp2)
[1] "east2b.1"
> accounts[ , CrossTable(eval(temp1), eval(temp2), expected = FALSE,
prop.chisq = FALSE, prop.c = FALSE)]
Error in chisq.test(t, correct = FALSE) :
  'x' must at least have 2 elements

>From the output of dput here, can you reconstruct accounts for
demonstration? I could drop it in a website/

> dput(accounts[1:4, .SD])
structure(list(sippid = c("019003754630:0203", "019003754630:0204",
"019052074737:0101", "019052074737:0102"), east2bFirst = c("99",
"11.0", "04.0", "04.0"), east2b = structure(c(2L, 1L, 1L, 1L), .Label =
c("Yes",
"No"), class = "factor"), tage = c(19L, 25L, 30L, 29L), east2aFirst =
c("99",
"99", "03.0", "03.0"), east2a = structure(c(2L, 2L, 1L, 1L), .Label =
c("Yes",
"No"), class = "factor"), east2b.1 = structure(c(2L, 2L, 2L,
2L), .Label = c("Yes", "No"), class = "factor"), tage.1 = c(19L,
22L, 30L, 28L), east3bFirst = c("99", "99", "03.0", "03.0"),
    east3b = structure(c(2L, 2L, 1L, 1L), .Label = c("Yes", "No"
    ), class = "factor"), east2b.2 = structure(c(2L, 2L, 2L,
    2L), .Label = c("Yes", "No"), class = "factor"), tage.2 = c(19L,
    22L, 30L, 28L), east1aFirst = c("99", "99", "11.0", "11.0"
    ), east1a = structure(c(2L, 2L, 1L, 1L), .Label = c("Yes",
    "No"), class = "factor"), east2b.3 = structure(c(2L, 2L,
    1L, 1L), .Label = c("Yes", "No"), class = "factor"), tage.3 = c(19L,
    22L, 32L, 31L), east3aFirst = c("99", "99", "11.0", "11.0"
    ), east3a = structure(c(2L, 2L, 1L, 1L), .Label = c("Yes",
    "No"), class = "factor"), east2b.4 = structure(c(2L, 2L,
    1L, 1L), .Label = c("Yes", "No"), class = "factor"), tage.4 = c(19L,
    22L, 32L, 31L), east2cFirst = c("99", "99", "99", "99"),
    east2c = structure(c(2L, 2L, 2L, 2L), .Label = c("Yes", "No"
    ), class = "factor"), east2b.5 = structure(c(2L, 2L, 2L,
    2L), .Label = c("Yes", "No"), class = "factor"), tage.5 = c(19L,
    22L, 29L, 28L), east1bcFirst = c("99", "99", "08.0", "09.0"
    ), east1bc = structure(c(2L, 2L, 1L, 1L), .Label = c("Yes",
    "No"), class = "factor"), east2b.6 = structure(c(2L, 2L,
    1L, 1L), .Label = c("Yes", "No"), class = "factor"), tage.6 = c(19L,
    22L, 31L, 30L), east2dFirst = c("99", "99", "99", "99"),
    east2d = structure(c(2L, 2L, 2L, 2L), .Label = c("Yes", "No"
    ), class = "factor"), east2b.7 = structure(c(2L, 2L, 2L,
    2L), .Label = c("Yes", "No"), class = "factor"), tage.7 = c(19L,
    22L, 29L, 28L)), .Names = c("sippid", "east2bFirst", "east2b",
"tage", "east2aFirst", "east2a", "east2b.1", "tage.1", "east3bFirst",
"east3b", "east2b.2", "tage.2", "east1aFirst", "east1a", "east2b.3",
"tage.3", "east3aFirst", "east3a", "east2b.4", "tage.4", "east2cFirst",
"east2c", "east2b.5", "tage.5", "east1bcFirst", "east1bc", "east2b.6",
"tage.6", "east2dFirst", "east2d", "east2b.7", "tage.7"), sorted =
"sippid", class = c("data.table",
"data.frame"), row.names = c(NA, -4L), .internal.selfref = <pointer:
0x1df8f58>)




-- 
Paul E. Johnson
Professor, Political Science      Assoc. Director
1541 Lilac Lane, Room 504      Center for Research Methods
University of Kansas                 University of Kansas
http://pj.freefaculty.org               http://quant.ku.edu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/datatable-help/attachments/20140309/41775ba3/attachment.html>


More information about the datatable-help mailing list