我是新手R
,我相信这很简单,但我不确定要搜索哪些术语。
我在目录中有一系列数据文件,每个都具有相同的格式(制表符分隔,每个都有X_DATA
和Y_DATA
列)。我想打开它们并用 绘制它们ggplot2
,每个数据集都有不同的颜色。我尝试了以下方法,但它返回错误(也在下面)。
脚本:
require(ggplot2)
# ---
# open files
d_files <- list.files(pattern = '*.dat', recursive=TRUE)
d_list <- lapply(d_files, read.csv, sep = "\t")
## ---
# add a name attribute
for (i in seq_along(d_list)) attr(d_list[[i]], 'Name') <- d_files[[i]]
# ---
# join all of the files into a single dataset
d <- do.call('rbind', d_list)
# ---
# plot
p <- ggplot(data=d, aes(x=X_DATA, y=Y_DATA, colour=Name)) + geom_point()
ggsave(p, file="test.pdf", width=8, height=4.5)
输出:
Loading required package: ggplot2
Loading required package: methods
Error in eval(expr, envir, enclos) : object 'Name' not found
Calls: ggsave ... sapply -> lapply -> eval.quoted -> lapply -> FUN -> eval
Execution halted
编辑:
这是一个python
生成一些数据的脚本
from random import uniform
N = 100 # entries per file
M = 3 # number of files
for i in range(M):
with open('%i.dat' % (i + 1), 'w') as f:
f.write('X_DATA\tY_DATA\n')
f.write('\n'.join((('%g\t%g' % (x, x ** (i + 1))) for x in (uniform(0,1) for j in range(N)))))
该R
脚本显示了我想要的内容,但是,在这里,我必须明确输入每个文件。这不适用于工作版本。
# ---
# read each file and assign the dataset a name
d1 <- read.csv('1.dat', sep='\t')
d1$Name = '1.dat'
d2 <- read.csv('2.dat', sep='\t')
d2$Name = '2.dat'
d3 <- read.csv('3.dat', sep='\t')
d3$Name = '3.dat'
# ---
# combine datasets
d <- rbind(d1, d2, d3)
# ---
# plot
p <- ggplot(data=d, aes(x=X_DATA, y=Y_DATA, colour=Name)) + geom_point()
ggsave(p, file="test.pdf", width=8, height=4.5)
从原始脚本中,按以下方式设置以下内容:for (i in seq_along(d_list)) d_list[[i]][['Name']] <- d_files[[i]]
-- 但这并不意味着我现在有一个Name
为每个数据点调用的文本元素吗?这让我觉得不理想...