【问题标题】:R: Producing Plots of Multiple Dataframes Stored in a VectorR:生成存储在向量中的多个数据帧的图
【发布时间】:2017-06-02 22:47:22
【问题描述】:

我正在尝试以编程方式为多个数据框生成图,并根据数据框的名称为每个数据框指定一个唯一的名称。数据框已导入 R 并在名称列表中给出名称。每个数据框有两列。我的目标是为第二列中的值生成排名,并根据排名绘制值。

library(ggplot2)
library(tibble)

# List of data frame names 
namelist<- c("ara5", "brach5", "homo5", "hord5", "ory5", "sor5", "trit5", 
"zea5")

## Define function 
makePlot<- function(DF){
  sortindex<- order(DF[,2])
  rnk<-rank(DF[,2])
  temp<-as.tibble(cbind(rnk, DF[,2]))
  colnames(temp)<-c("rank", "count")
  p<- qplot(temp$rank, temp$count, xlab="rank", ylab="count", main=DF)
  file<-paste(DF, ".png", sep="")
  ggsave(file, plot=p, device="png")
}

## call function 
sapply(namelist, makePlot)

当我运行上述代码时,我收到以下错误: DF[, 2] 中的错误:维数不正确

我已确认我尝试从中提取数据的数据帧具有正确的维数,因此我认为此代码在数据帧列表中的迭代方式存在问题。

我该如何解决这个问题?

【问题讨论】:

  • 如果去掉名字的引号会发生什么?数据框对象的名称通常不用引号。
  • 删除引号或尝试 list(ara5, ...etc) 都会产生错误。
  • 错误是什么?可能还有其他问题。
  • 不确定。我刚刚通过在 bash 中使用包装脚本解决了这个问题,该脚本将文件名和带有扩展名的文件名传递给 R 脚本。

标签: r loops ggplot2


【解决方案1】:

解决此问题的一种方法是使用get 来获取以传递给函数的字符串命名的变量。

即:

makePlot<- function(DF){
  DF <- get(DF)
  ...

【讨论】:

  • 没用。 grDevices::dev.off() 中的错误:QuartzBitmap_Output - 无法打开文件 'c(624, 15, 599, 305, 597,
猜你喜欢
  • 2020-12-20
  • 2021-11-01
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
相关资源
最近更新 更多