R - Mapply 功能创建和 PDFing Plots/ggplots
R - Mapply Functionality Creating and PDFing Plots/ggplots
我是 R 的新手,希望有人能在下面的代码中向我解释两件事。
- 为什么我需要双括号
{{
将情节放在 recordPlot 中以便我可以重放?然后我需要在 replayPlot. 中使用双方括号 [[
- 为什么我不能在 mapply 中使用
$
符号?它在它之外工作。在 "proper" R 工作中使用 $ 不好吗?
我的实际代码要大得多,所以认为最好让 mapply 工作。
library(ggplot2)
library(gridExtra)
TDSF <- data.frame(Graduation=sample(1950:2010, 30,replace=TRUE),
Donation=sample(10:50000, 30,replace=TRUE),
Start.Year=sample(1950:2010,30,replace=TRUE),
State=sample(state.abb,30,replace=TRUE))
TDSF$Graduation <- as.numeric(as.character(TDSF$Graduation))
TDSF$Start <- as.numeric(as.character(TDSF$Start))
plots2 <- mapply(function(nm,df.year,df.bracket_5,df.bracket_10) list(
{{plot(-1:1,-1:1,type="n",xaxt="n",yaxt="n",ann=FALSE)+
text(0,0,paste("Analysis by",nm,"Year"),cex=2)
recordPlot()}},
{ggplot(data=TDSF, aes_(x=as.name(nm))) + geom_histogram(color="red",binwidth = 1,boundary=-.01)},
{ggplot(data=TDSF, aes_(x=as.name(nm))) + geom_histogram(color="red",binwidth = 5,boundary=-.01)}
),c("Graduation","Start"),SIMPLIFY = FALSE)
replayPlot(plots2$Graduation[[1]]) #use $ notation
do.call(grid.arrange,plots2$Graduation[2:3])`#use $ notation
mapply(function(nm)
{pdf(file=paste(nm,"test.pdf"))
replayPlot(plots2[[nm]][[1]]) #use [[]][[]]
do.call(grid.arrange,c(plots2[[nm]][2:3],ncol=1)) #use [[]][[]]
dev.off()}
,c("Graduation","Start"))
让我重新格式化一下您的代码:
library(ggplot2)
library(gridExtra)
TDSF <- data.frame(Graduation=sample(1950:2010, 30,replace=TRUE),
Donation=sample(10:50000, 30,replace=TRUE),
Start.Year=sample(1950:2010,30,replace=TRUE),
State=sample(state.abb,30,replace=TRUE))
TDSF$Graduation <- as.numeric(as.character(TDSF$Graduation))
TDSF$Start <- as.numeric(as.character(TDSF$Start))
plots2 <- mapply(function(nm,df.year,df.bracket_5,df.bracket_10) list(
{plot(-1:1,-1:1,type="n",xaxt="n",yaxt="n",ann=FALSE)+
text(0,0,paste("Analysis by",nm,"Year"),cex=2)
recordPlot()},
{ggplot(data=TDSF, aes_(x=as.name(nm))) + geom_histogram(color="red",binwidth = 1,boundary=-.01)},
{ggplot(data=TDSF, aes_(x=as.name(nm))) + geom_histogram(color="red",binwidth = 5,boundary=-.01)}
),c("Graduation","Start"),SIMPLIFY = FALSE)
plots2
replayPlot(plots2$Graduation[[1]]) #use $ notation
n <- length(plots2)
nCol <- floor(sqrt(n))
do.call("grid.arrange",c(plots2$Graduation[2:3], ncol=nCol)) #use $ notation
replay <- function(nm) {
pdf(file = paste(nm,"test.pdf"))
replayPlot(plots2[[nm]][[1]]) #use [[]][[]]
do.call(grid.arrange,c(plots2[[nm]][2:3],ncol = 1)) #use [[]][[]]
dev.off()
}
mapply(replay ,c("Graduation","Start"))
你不需要双括号
双方括号用于顺序访问元素。 plots2是一个相对复杂的结构,有很多方法可以访问它的元素
plots2$Graduation[[1]] is equivalent to plots2[[1]][[1]] for example
- $ 与 mapply 无关,但您可以在函数回放(我已添加)中看到,这是由于运行时 nm 变量的 R 解释。
nm 是一个变量,你不能使用 plots$nm (你必须使用一些 eval 函数让 R 理解你真正的意思)
我是 R 的新手,希望有人能在下面的代码中向我解释两件事。
- 为什么我需要双括号
{{
将情节放在 recordPlot 中以便我可以重放?然后我需要在 replayPlot. 中使用双方括号 - 为什么我不能在 mapply 中使用
$
符号?它在它之外工作。在 "proper" R 工作中使用 $ 不好吗?
[[
我的实际代码要大得多,所以认为最好让 mapply 工作。
library(ggplot2)
library(gridExtra)
TDSF <- data.frame(Graduation=sample(1950:2010, 30,replace=TRUE),
Donation=sample(10:50000, 30,replace=TRUE),
Start.Year=sample(1950:2010,30,replace=TRUE),
State=sample(state.abb,30,replace=TRUE))
TDSF$Graduation <- as.numeric(as.character(TDSF$Graduation))
TDSF$Start <- as.numeric(as.character(TDSF$Start))
plots2 <- mapply(function(nm,df.year,df.bracket_5,df.bracket_10) list(
{{plot(-1:1,-1:1,type="n",xaxt="n",yaxt="n",ann=FALSE)+
text(0,0,paste("Analysis by",nm,"Year"),cex=2)
recordPlot()}},
{ggplot(data=TDSF, aes_(x=as.name(nm))) + geom_histogram(color="red",binwidth = 1,boundary=-.01)},
{ggplot(data=TDSF, aes_(x=as.name(nm))) + geom_histogram(color="red",binwidth = 5,boundary=-.01)}
),c("Graduation","Start"),SIMPLIFY = FALSE)
replayPlot(plots2$Graduation[[1]]) #use $ notation
do.call(grid.arrange,plots2$Graduation[2:3])`#use $ notation
mapply(function(nm)
{pdf(file=paste(nm,"test.pdf"))
replayPlot(plots2[[nm]][[1]]) #use [[]][[]]
do.call(grid.arrange,c(plots2[[nm]][2:3],ncol=1)) #use [[]][[]]
dev.off()}
,c("Graduation","Start"))
让我重新格式化一下您的代码:
library(ggplot2)
library(gridExtra)
TDSF <- data.frame(Graduation=sample(1950:2010, 30,replace=TRUE),
Donation=sample(10:50000, 30,replace=TRUE),
Start.Year=sample(1950:2010,30,replace=TRUE),
State=sample(state.abb,30,replace=TRUE))
TDSF$Graduation <- as.numeric(as.character(TDSF$Graduation))
TDSF$Start <- as.numeric(as.character(TDSF$Start))
plots2 <- mapply(function(nm,df.year,df.bracket_5,df.bracket_10) list(
{plot(-1:1,-1:1,type="n",xaxt="n",yaxt="n",ann=FALSE)+
text(0,0,paste("Analysis by",nm,"Year"),cex=2)
recordPlot()},
{ggplot(data=TDSF, aes_(x=as.name(nm))) + geom_histogram(color="red",binwidth = 1,boundary=-.01)},
{ggplot(data=TDSF, aes_(x=as.name(nm))) + geom_histogram(color="red",binwidth = 5,boundary=-.01)}
),c("Graduation","Start"),SIMPLIFY = FALSE)
plots2
replayPlot(plots2$Graduation[[1]]) #use $ notation
n <- length(plots2)
nCol <- floor(sqrt(n))
do.call("grid.arrange",c(plots2$Graduation[2:3], ncol=nCol)) #use $ notation
replay <- function(nm) {
pdf(file = paste(nm,"test.pdf"))
replayPlot(plots2[[nm]][[1]]) #use [[]][[]]
do.call(grid.arrange,c(plots2[[nm]][2:3],ncol = 1)) #use [[]][[]]
dev.off()
}
mapply(replay ,c("Graduation","Start"))
你不需要双括号
双方括号用于顺序访问元素。 plots2是一个相对复杂的结构,有很多方法可以访问它的元素
plots2$Graduation[[1]] is equivalent to plots2[[1]][[1]] for example
- $ 与 mapply 无关,但您可以在函数回放(我已添加)中看到,这是由于运行时 nm 变量的 R 解释。 nm 是一个变量,你不能使用 plots$nm (你必须使用一些 eval 函数让 R 理解你真正的意思)