On Tue, Aug 28, 2012 at 1:00 PM, Simon Urbanek <simon.urba...@r-project.org> wrote: > > On Aug 28, 2012, at 1:51 PM, R. Michael Weylandt wrote: > >> /src/main/attrib.c contains this comment in row_names_gets(): >> >> /* This should not happen, but if a careless user dput()s a >> data frame and sources the result, it will */ >> >> which svn blame says Prof Ripley placed there in r39830 with the >> commit message "correct the work of dput() on the row names of a data >> frame with compact representation." >> >> Is there a problem / better way to use the result of a hefty dput than >> source()ing it? > > It's pretty much the least efficient and most dangerous (as in insecure) way. > That's why there is serialization instead ... >
My most common use of dput() is for sending plain text data over r-help; would this be an official/unofficial advisement to push folks to use serialize(x, NULL, ascii = TRUE) instead? At first blush that seems to be less space efficient: sum(nchar(capture.output(dput(iris)))) # 3767 sum(nchar(serialize(iris, NULL, ascii = TRUE))) # 5922: probably even more if we dump it properly to plain text in a copy+pasteable form Michael > Cheers, > Simon > > > >> This seems to work rather robustly: >> >> data(iris) >> source(textConnection(paste0("iris2 <- ", capture.output(dput(iris))))) >> identical(iris, iris2) >> >> Cheers, >> Michael >> >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> >> > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel