Отступы строки кода 'n' пробелы - PullRequest
4 голосов
/ 18 ноября 2011

Для того чтобы код был распознан как код, он должен содержать четыре пробела Это можно сделать вручную или с помощью значка скобок или отметок. Что если бы я хотел сделать это через R? Очевидно, это можно сделать (просто посмотрите на formatR). Как это сделать с наименьшим количеством написания кода?

Так что для следующих строк (фрейм данных и функция), как лучше всего (наименьшее количество кода) использовать R для отступа в каждой строке ровно 4 пробела?

foo<-function(x,y){
   z<-x*y
   super.z<-z^2
   return(super.z)
}

и

     id hs.grad  race gender age
1   ID1     yes asian female  32
2   ID2     yes white female  30
3   ID3     yes white female  34
4   ID4     yes black female  25
5   ID5      no white   male  19

Ответы [ 4 ]

4 голосов
/ 18 ноября 2011

Вот небольшая функция, которая будет форматировать объект совместимым с StackOverflow способом:

formatSO <- function(x) {
  y <- get(x, parent.frame())
  d <- deparse(y)

  cat("   ", x, "<-", d[1], "\n")
  cat(paste("    ", d[-1], "\n", sep=""), sep="")
}

И пробовать его:

> foo<-function(x,y){
+    z<-x*y
+    super.z<-z^2
+    return(super.z)
+ }
> formatSO("foo")
    foo <- function (x, y)  
    {
        z <- x * y
        super.z <- z^2
        return(super.z)
    }
> x <- 5:3
> formatSO("x")
    x <- c(5L, 4L, 3L) 
3 голосов
/ 18 ноября 2011

Настройка

options(prompt = "    ")

приведет к тому, что любой код, который вы пишете в консоли, будет отформатирован, чтобы его можно было легко вставить сюда.Впрочем, в начале вывода не будет четырех пробелов, и, вероятно, потребуется другой обходной путь.

2 голосов
/ 18 ноября 2011

formatR: Format R Code Automatically может использоваться для этой цели.В наличии здесь

library(formatR)
src <- c("foo<-function(x,y){
   z<-x*y


              super.z<-z^2
   return(super.z)
}
")

tidy.source(text = src, replace.assign = TRUE)


foo <- function(x, y) {
    z <- x * y
    super.z <- z^2
    return(super.z)
} 
1 голос
/ 19 ноября 2011

Я решил потратить впустую свое время, фактически выполняя эту функцию именно так, как я ее описал.Я создал функцию, которая принимает фреймы данных или функции и может быть набрана или обрезана в функцию отступа.Это будет отступать от кода столько пробелов, сколько необходимо с аргументом пробела (по умолчанию четыре пробела).

indent <- function(object = "clipboard", space = 4) {        
    y <- if (object == "clipboard") {                        
        as.list(readClipboard())                             
    } else {                                                 
        strsplit(as.vector(object), "[\\n]")                 
    }                                                        
    spacer <- function(x) paste(paste(rep(" ", space - 2),   
        collapse = ""), x)                                   
    z <- if (object == "clipboard") {                        
        sapply(y, spacer)                                    
    } else {                                                 
        lapply(y, spacer)                                    
    }                                                        
    zz <- as.matrix(as.data.frame(z))                        
    dimnames(zz) <- list(c(rep("", nrow(zz))), c(""))        
    noquote(zz)                                              
}                                                            
#==========================================================  
#   Test it out!!!!!!                                        
#==========================================================  
indent("     id hs.grad  race gender age                     
1   ID1     yes white   male  37                             
2   ID2     yes white   male  32                             
3   ID3     yes asian   male  20                             
4   ID4      no black female  24                             
5   ID5      no white female  32")                           
#==========================================================  
indent("ascii<-function(x, header=TRUE,...){                 
      name <-textConnection(x)                               
      DF <- read.table(name, header, ...)                    
      close(name)                                            
      on.exit(closeAllConnections())                         
      DF                                                     
}", space = 10)                                              
#============================================================
#  THE NEXT TWO CAN BE CUT AND PASTED WITH THE CLIPBOARD ARG 
#============================================================
     id hs.grad  race gender age                             
1   ID1     yes white   male  37                             
2   ID2     yes white   male  32                             
3   ID3     yes asian   male  20                             
4   ID4      no black female  24                             
5   ID5      no white female  32                             

indent("clipboard")                                          
#============================================================
ascii<-function(x, header=TRUE,...){                         
      name <-textConnection(x)                               
      DF <- read.table(name, header, ...)                    
      close(name)                                            
      on.exit(closeAllConnections())                         
      DF                                                     
}                                                            

indent()  #clipboard is the default arg not needed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...