gpt4 book ai didi

r - 绘图、文件中的动态变量名称以及与循环的兼容性

转载 作者:行者123 更新时间:2023-12-04 21:40:40 27 4
gpt4 key购买 nike

我正在尝试编写一个函数来制作绘图并将其自动保存到文件中。
我努力用它来动态地做的技巧[plotname=varname & filename=varname &],
并使其与从循环中调用它兼容。

# Create data
my_df = cbind(uni=runif (100),norm=rnorm (100),bino=rbinom(100,20, 0.5)); head (my_df)
my_vec = my_df[,'uni'];

# How to make plot and file-name meaningful if you call the variable in a loop?

# if you call by name, the plotname is telling. It is similar what I would like to see.
hist(my_df[,'bino'])


for (plotit in colnames(my_df)) {
hist(my_df[,plotit])
print (plotit)
# this is already not meaningful
}



# step 2 write it into files
hist_auto <- function(variable, col ="gold1", ...) {
if ( length (variable) > 0 ) {
plotname = paste(substitute(variable), sep="", collapse = "_"); print (plotname); is (plotname)
# I would like to define plotname, and later tune it according to my needs
FnP = paste (getwd(),'/',plotname, '.hist.pdf', collapse = "", sep=""); print (FnP)
hist (variable, main = plotname)
#this is apparently not working: I do not get my_df[, "bino"] or anything similar
dev.copy2pdf (file=FnP )
} else { print ("var empty") }
}


hist_auto (my_vec)
# name works, and is meaningful [as much as the var name ... ]

hist_auto (my_df[,'bino'])
# name sort of works, but falls apart

assign (plotit, my_df[,'bino'])
hist_auto (get(plotit))
# name works, but meaningless


# Now in a loop

for (plotit in colnames(my_df)) {
my_df[,plotit]
hist(my_df[,plotit])
## name works, but meaningless and NOT UNIQUE > overwritten by next
}


for (plotit in colnames(my_df)) {
hist_auto(my_df[,plotit])
## name works, but meaningless and NOT UNIQUE > overwritten by next
}

for (plotit in colnames(my_df)) {
assign (plotit, my_df[,plotit])
hist_auto (get(plotit))
## name works, but meaningless and NOT UNIQUE > overwritten by next
}

我的目标是拥有一个迭代的函数,例如。矩阵的列,以唯一且有意义的名称绘制并保存每个列。

解决方案可能会涉及到一个替代()解析()eval()和粘贴()的智能组合,但缺乏扎实的理解我没能弄清楚。

我的实验基础是:
how to dynamically call a variable?

最佳答案

这样的事情怎么样?您可能需要install.packages("ggplot2")

library(ggplot2)
my_df <- data.frame(uni=runif(100),
norm=rnorm(100),
bino=rbinom(100, 20, 0.5))
get_histogram <- function(df, varname, binwidth=1, save=T) {
stopifnot(varname %in% names(df))
title <- sprintf("Histogram of %s", varname)
p <- (ggplot(df, aes_string(x=varname)) +
geom_histogram(binwidth=binwidth) +
ggtitle(title))
if(save) {
filename <- sprintf("histogram_%s.png", gsub(" ", "_", varname))
ggsave(filename, p, width=10, height=8)
}
return(p)
}
for(var in names(my_df))
get_histogram(my_df, var, binwidth=0.5) # If you want to save them
get_histogram(my_df, "uni", binwidth=0.1, save=F) # If you want to look at a specific one

关于r - 绘图、文件中的动态变量名称以及与循环的兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27483165/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com