我的管道将csv读入数据帧,分配rownames,删除列,执行pca,绘制pca并从pca中提取有意义的变量,这些变量也是绘制的。 这是我当前的代码,它只能到第一个图:
library(ggplot2)
library(ggrepel)
tsv = read.csv('matrix.tsv', sep='\t')
bell= read.csv('bell.tsv', sep='\t')
tail= read.csv('tail.tsv', sep='\t')
dfList = list(tail, tsv, bell)
#process csv's
dfList = lapply(dfList, function(dum){
rownames(dum) = dum[,1]
dum[,1] = NULL
dum$X = NULL
dum = dum[, -grep('un', colnames(dum))]
})
#create pca's of dataframes
pcaList = lapply(dfList, function(pca){
prin_comp = prcomp(pca, scale. = T)
})
#plot top 2 principle components in the pca
plotList = lapply(pcaList, function(prin_comp){
t = qplot(x=prin_comp$rotation[,1], y=prin_comp$rotation[,2]) + geom_text_repel(aes(label=row.names(prin_comp$rotation)))
})
#this plots the 3 plots, one for each pca, but they are un-named
plotList
问题是图表没有有意义的名称/标题。我不知道如何保持信息存在,从功能传递到功能。 我知道必须有一种更优雅的方式来做到这一点。我花了一天的时间阅读有关处理多个csv文件的类似且不太相似的问题。但要么它们不适用,要么不适合我的情况。 正如这个问题的标题所暗示的那样,我宁愿一次在一个csv上执行此操作,而不是一次只执行3个csv,因为所讨论的csv非常大,每个超过5GB,因此将每个数据帧和pca保留在内存中同时是不可能的。
答案 0 :(得分:1)
你只需要保留一个你想用作标题的字符串并将ggtitle(YOUR_TITLE)
添加到你的情节中,但这对于你当前的代码来说并不容易。在进行下一步之前,不是为每个CSV执行每个分析步骤,为什么不一次只为一个CSV执行所有步骤?
您的代码可能如下所示:
library(ggplot2)
library(ggrepel)
csvs <- c("matrix.tsv","bell.tsv","tail.tsv")
for (i in csvs) {
# read file
df <- read.csv(i, sep='\t')
# process file
rownames(df) <- df[,1]
df[,1] <- NULL
df$X = NULL
df = df[, -grep('un', colnames(df))]
# create pca
pca <- prcomp(df, scale = T)
# plot pca
pcaPlot <- qplot(x=pca$rotation[,1], y=pca$rotation[,2]) +
geom_text_repel(aes(label=row.names(pca$rotation))) +
ggtitle(i)
print(pcaPlot)
# extract and plot meaningful variables
# ...
}
基本上我只是将你所做的一切都放在lapply
循环的for
调用中,这种方法当时也处理了一个CSV。