我有一个字符向量中的文件名列表,我想在Hadley的reshape2包的melt
命令中使用这些文件名。字符向量包含具有大量变量和记录的子集化数据帧的名称:
char <- c("b1", "b2", "b3", "b4")
data <- melt(chr[[1]], id.var = 1:5)
这将返回一个包含1个观察值和1个变量b1
的数据框。如何让R将字符串视为对象名称以创建数据框?
由于
抱歉缺乏信息。我从.csv文件加载了一个数据集,其中汇总数据包含150条记录和41个变量,然后我创建了4个子集。我想将这些子集放在'for'循环中,并生成一系列从每个子集保存为.pdf文件的图。我在数据中有一个标识组的变量 - grp
向量列出了这些组。我想根据子组数据为每个组运行热图:
#### load data
options(stringsAsFactors = F)
df <- read.csv("file.csv")
> dim(df)
[1] 150 41
#### Create subsets
b1 <- df[1:16]
b2 <- df[c(1:5, 17:27)]
b3 <- df[c(1:5, 28:35)]
b4 <- df[c(1:5, 36:41)]
#### Vector of names for subsets
subs <- c("b1", "b2", "b3", "b4")
#### Group names
grp <- unique(df$groups)
#### Generate Plots - start pdf device
pdf(file = “file name”, width = 11, height = 8,
family = "Helvetica", title = "Heatmap", bg = "white")
#### Group loop
for(g in 1:length(grp)){
#### Subset loop
for(i in 1:length(subs)){
data <- melt(get(subs[[i]]), id.var = 1:5)
print(ggplot(data, aes(variable, v1)) +
geom_tile(aes(fill = value), color = "white") +
scale_fill_gradient(low = "white", high = "darkgreen") +
theme_bw(base_size = 12) +
labs(x = "",y = "", fill = "Score") +
scale_x_discrete(expand = c(0, 0)) +
scale_y_discrete(expand = c(0, 0)) +
opts(axis.ticks = theme_blank(), title = paste(grp[[g]]) , ": ",
subs[[i]])))
}
}
dev.off()
get
命令是将字符串作为对象读取所需的melt
,否则sub[[i]]
命令返回一个包含1列和1行的数据帧以及子集的名称在牢房里。
谢谢大家的帮助