1

也许我使用了错误的搜索词,或者这是不可能的:

我使用 ddply 打印出很多图表。在执行此操作的函数中,我想创建一个子目录,所有这些图都在其中。

这本身没有问题。但是,我不想将目录名称作为额外的输入参数传递,而是希望该函数以某种方式读取我 ddplyed 上的数据框的名称。

到目前为止,我使用这种方法:

myplotfunction <- function(x,df_name){
      p=ggplot (...)
      ggsave(file.path(getwd,df_name,paste0(x$name,".png"),plot=p)
}

ddply(mydfIddplyUpon,.(name),myplotfunction,df_name="mydfIddplyUpon")

但是如果我能得到函数来找出被 plyr 拆分的 df 的名称,这会方便得多。

4

1 回答 1

3

你可以做一个包装函数,

nddply <- function(x, var, fun, ...){
  xn <- deparse(substitute(x))
  plyr::ddply(x, var, fun, ..., directory_name = xn)
}

# where fun is your function that needs a directory_name
fun <- function(a, directory_name, ...)
  paste(nrow(a),  directory_name, ...)

nddply(iris, "Species", fun, sep=", from: ")

编辑:这是一个保存图的示例

nd_ply <- function(x, var, fun, ...){
  xn <- deparse(substitute(x))
  plyr::d_ply(x, var, fun, ..., directory_name = xn)
}

fun <- function(a, directory_name, ...)
  ggsave(paste0(directory_name, unique(a$Species), ".pdf"), 
         ggplot(a, aes_string(x="Sepal.Length", y="Sepal.Width", ...))+ geom_point())

nd_ply(iris, "Species", fun, colour="Sepal.Length")
于 2013-11-03T23:38:10.617 回答