Thanks
a lot, Charles and Yihui,
Your
ideas are great! Both worked, although Yihui's solutions are a lot more
comprehensive.
BTW
as a comment on Charles idea, parse function works for loosen statement lines,
for not for the code blocks of a function. For example, the following code for
vennCounts
function could not be sorted by using parse alone if we copy and paste into a
source file. However, if we comment the first line out as: # vennCounts <-
function (x, include = "both"), parse works and sorts the individual
lines as expected.
My
problem is well solved with your suggestions. But both ways, we used Râs own
resource/functionality. I am curious, are there any ways to break the long
lines automatically just in the text editor Emacs/ESS without using R? Thanks!
Heyi
Â
vennCounts
<- function (x, include = "both")
 {
       x <- as.matrix(x)
           include <- match.arg(include,
c("both", "up", "down"))
           x <- sign(switch(include, both =
abs(x), up = x > 0, down = x < 0))
           nprobes <- nrow(x)
           ncontrasts <- ncol(x)
           names <- colnames(x)
           if (is.null(names))
                     names <-
paste("Group", 1:ncontrasts)
           noutcomes <- 2^ncontrasts
           outcomes <- matrix(0, noutcomes,
ncontrasts)
           colnames(outcomes) <- names
           for (j in 1:ncontrasts) outcomes[,
j] <- rep(0:1, times = 2^(j - 1), each = 2^(ncontrasts - j))
           xlist <- list()
           for (i in 1:ncontrasts) xlist[[i]]
<- factor(x[, ncontrasts - i + 1], levels = c(0, 1))
           counts <-
as.vector(table(xlist))
           structure(cbind(outcomes, Counts =
counts), class = "VennCounts")
     }
Â
--- On Tue, 8/24/10, Yihui Xie <[email protected]> wrote:
From: Yihui Xie <[email protected]>
Subject: Re: [R] break the long R code lines automatically
To: "Charles C. Berry" <[email protected]>
Cc: "heyi xiao" <[email protected]>, [email protected]
Date: Tuesday, August 24, 2010, 7:23 PM
Actually I've implemented Charles' idea in the function tidy.source()
in package 'animation' years ago. An example can be found here:
http://animation.yihui.name/animation:misc#tidy_up_r_source
BTW, you might be interested in the 'formatR' package if you are
somehow addicted to GUI:
http://yihui.name/en/2010/04/formatr-farewell-to-ugly-r-code/
Regards,
Yihui
--
Yihui Xie <[email protected]>
Phone: 515-294-6609 Web: http://yihui.name
Department of Statistics, Iowa State University
2215 Snedecor Hall, Ames, IA
On Tue, Aug 24, 2010 at 4:07 PM, Charles C. Berry <[email protected]> wrote:
> On Tue, 24 Aug 2010, heyi xiao wrote:
>
>>
>>
>>
>>
>> Dear
>> all,
>>
>> I have
>> written some R source program with many thousands of lines. I didnât
>> insert
>> line breaks automatically or manually for the long lines. But now I would
>> like
>> to edit the source code in Emacs/ESS to make it more formal as a package.
>> One of
>> the major problems here is how to break the long lines automatically.
>> Emacs auto-fill-mode
>> only works for the lines you are typing in currently, and fill commands
>> like M-q
>> (fill-paragraph) or M-x fill-region (fill-region) mess up the R code lines
>> as
>> they take a whole function/paragraph as a long line, and remove the
>> original
>> line breaks.
>>
>> I find
>> simple solutions for indenting code regions in Emacs/ESS, but no good ones
>> for
>> breaking code lines. However, I saw the nice multi-line codes in all
>> R/Bioconductor packages. Please let me know if you have any ideas on how
>> people
>> usually break the existent long R code lines automatically. I will really
>> appreciate your kind help!
>
>
> Not particualrly elegant, but a combination of parse and print will break
> long lines:
>
>
>> cat("y <- ",paste( 1:20,collapse=" + "),"\n","y2 <- ",
>
> + Â paste( 1:20,collapse="+"),"\n",file="testwrap.R")
>>
>> for (iexpr in parse("testwrap.R")) print(iexpr)
>
> y <- 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 +
> Â Â 14 + 15 + 16 + 17 + 18 + 19 + 20
> y2 <- 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 +
> Â Â 14 + 15 + 16 + 17 + 18 + 19 + 20
>>
>> nchar(readLines("testwrap.R"))
>
> [1] 95 59
>>
>
> and of course you will want 'sink' or some such to save the lines.
>
> HTH,
>
> Chuck
>
>
>>
>> Heyi
>>
>>
>>
>>
>>
>> Â Â Â Â [[alternative HTML version deleted]]
>>
>>
>
> Charles C. Berry               (858) 534-2098
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Dept of
> Family/Preventive
> Medicine
> E mailto:[email protected] Â Â Â Â Â Â Â UC San Diego
> http://famprevmed.ucsd.edu/faculty/cberry/ Â La Jolla, San Diego 92093-0901
>
>
> ______________________________________________
> [email protected] mailing list
> 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]]
______________________________________________
[email protected] mailing list
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.