Muhuri, Pradip (SAMHSA/CBHSQ)
2015-May-02 04:13 UTC
[R] R Error: wrong result size (...), expected ... or 1 (minimal example provided)
Hello, I am reposting my question with a reproducible example/minimal dataset (6 rows) this time. I have written a user-defined function (myFunc below) with ten arguments. When calling the function, I get the following message: ?Error: wrong result size (0), expected 2 or 1?. I am not getting the desired output dataset that will have 2 rows. How would I resolve the issue? Any hints would be appreciated. These results are from the following code chunk outside myFunc: addmargins(table(xanloid_set$cohort_type)) NMPR_Cohort OID_Cohort Other Sum 2 1 3 6 . Thanks, Pradip Muhuri # myFunc_rev.R setwd ("H:/R/cis_data") library(dplyr) rm(list = ls()) # data object - description temp <- "id intdate anldate oiddate herdate cohort_type 1 2004-11-04 2002-07-18 2001-07-07 2003-11-03 NMPR_Cohort 2 2004-10-24 NA 2002-10-13 NA OID_Cohort 3 2004-10-10 NA NA NA Other 4 2004-09-01 1999-08-10 NA 2002-11-04 NMPR_Cohort 5 2004-09-04 1997-10-05 NA NA Other 6 2004-10-25 NA NA 2011-11-04 Other" # read the data object xanloid_set <- read.table(textConnection(temp), colClasses=c("character", "Date", "Date", "Date", "Date", "character"), header=TRUE, as.is=TRUE ) # print the data object xanloid_set # Define user-defined function myFunc <- function (newdata, oridata, cohort, value, xdate_to_int_time, xflag, idate, xdate, xdate_to_int_time_cat, year) { newdata <- filter (oridata, cohort== value ) %>% mutate(xdate_to_int_time = ifelse(xflag==1, (idate-xdate)/365.25, NA), xdate_to_int_time_cat = cut(xdate_to_int_time, breaks=c(0,1,2,3,4,5,6,7), include.lowest=TRUE, stringsAsFactors = FALSE) ) addmargins(with(newdata, table(year, xdate_to_int_time_cat, na.rm=TRUE))) } # invoke user defined function myFunc ( newdata=nmpr_nmproid, oridata=xanloid_set, cohort=xanloid_set$cohort_type, value= "NMPR_Cohort", xdate_to_int_time=anl_to_int_time, xflag=xanloid_set$anlflag, idate=xanloid_set$intdate, xdate=xanloid_set$anldate, xdate_to_int_time_cat=xanloid_set$anl_to_int_time_cat, year=xanloid_set$xyear ) # tabulate cohort_type addmargins(table(xanloid_set$cohort_type)) [[alternative HTML version deleted]]
William Dunlap
2015-May-02 16:41 UTC
[R] R Error: wrong result size (...), expected ... or 1 (minimal example provided)
# invoke user defined function myFunc ( newdata=nmpr_nmproid, oridata=xanloid_set, cohort=xanloid_set$cohort_type, value= "NMPR_Cohort", xdate_to_int_time=anl_to_int_time, xflag=xanloid_set$anlflag, idate=xanloid_set$intdate, xdate=xanloid_set$anldate, xdate_to_int_time_cat=xanloid_set$anl_to_int_time_cat, year=xanloid_set$xyear ) Note that some of your arguments are NULL because xanloid_set does not contain components by the given name. E.g., xanloid_set$anlflag is NULL because there is no column called 'anlflag' in xanloid_set. The NULL's will cause various problems downstream. You can avoid this problem by using the syntax xanloid_set[ , "anlflag"] which will give an error if the requested column does not exist. Bill Dunlap TIBCO Software wdunlap tibco.com On Fri, May 1, 2015 at 9:13 PM, Muhuri, Pradip (SAMHSA/CBHSQ) < Pradip.Muhuri at samhsa.hhs.gov> wrote:> Hello, > > I am reposting my question with a reproducible example/minimal dataset (6 > rows) this time. > > I have written a user-defined function (myFunc below) with ten arguments. > When calling the function, I get the following message: ?Error: wrong > result size (0), expected 2 or 1?. > I am not getting the desired output dataset that will have 2 rows. How > would I resolve the issue? Any hints would be appreciated. > > > These results are from the following code chunk outside myFunc: > > addmargins(table(xanloid_set$cohort_type)) > > > > NMPR_Cohort OID_Cohort Other Sum > 2 1 3 6 > > . > > Thanks, > > Pradip Muhuri > > > > > > # myFunc_rev.R > setwd ("H:/R/cis_data") > library(dplyr) > rm(list = ls()) > # data object - description > temp <- "id intdate anldate oiddate herdate cohort_type > 1 2004-11-04 2002-07-18 2001-07-07 2003-11-03 NMPR_Cohort > 2 2004-10-24 NA 2002-10-13 NA OID_Cohort > 3 2004-10-10 NA NA NA Other > 4 2004-09-01 1999-08-10 NA 2002-11-04 NMPR_Cohort > 5 2004-09-04 1997-10-05 NA NA Other > 6 2004-10-25 NA NA 2011-11-04 Other" > # read the data object > xanloid_set <- read.table(textConnection(temp), > colClasses=c("character", "Date", "Date", > "Date", "Date", "character"), > header=TRUE, as.is=TRUE > ) > # print the data object > xanloid_set > # Define user-defined function > myFunc <- function (newdata, > oridata, > cohort, > value, > xdate_to_int_time, > xflag, > idate, > xdate, > xdate_to_int_time_cat, > year) { > > newdata <- filter (oridata, cohort== value ) %>% > mutate(xdate_to_int_time > ifelse(xflag==1, (idate-xdate)/365.25, NA), > xdate_to_int_time_cat > cut(xdate_to_int_time, breaks=c(0,1,2,3,4,5,6,7), > > include.lowest=TRUE, stringsAsFactors = FALSE) ) > addmargins(with(newdata, table(year, > xdate_to_int_time_cat, na.rm=TRUE))) > } > # invoke user defined function > myFunc ( newdata=nmpr_nmproid, > oridata=xanloid_set, > cohort=xanloid_set$cohort_type, > value= "NMPR_Cohort", > xdate_to_int_time=anl_to_int_time, > xflag=xanloid_set$anlflag, > idate=xanloid_set$intdate, > xdate=xanloid_set$anldate, > xdate_to_int_time_cat=xanloid_set$anl_to_int_time_cat, > year=xanloid_set$xyear > ) > # tabulate cohort_type > addmargins(table(xanloid_set$cohort_type)) > > > > [[alternative HTML version deleted]] > > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]