对于要在此处识别为代码的代码,它必须缩进四个空格。这可以通过手工或括号图标或刻度标记来完成。如果我想通过R实现这一目标怎么办?显然这可以做到(只看格式R)。用最少的代码编写来解决这个问题的方法是什么?
因此,对于以下行(数据帧和函数),使用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
答案 0 :(得分:4)
这是一个小函数,它将以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)
答案 1 :(得分:3)
设置
options(prompt = " ")
将导致您在控制台中编写的任何代码都被格式化,以便在此处轻松粘贴。虽然输出在开头不会有四个空格,但可能需要不同的解决方法。
答案 2 :(得分:2)
formatR: Format R Code Automatically
可用于此目的。可用here
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)
}
答案 3 :(得分:1)
我决定今天浪费我的时间实际上正如我所描述的那样完成这个功能。我已经创建了一个带有数据帧或函数的函数,可以将输入或剪切板输入到缩进函数中。这将使用space参数缩进代码所需的空格(默认为四个空格)。
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