【发布时间】: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 脚本。