在R中为输出图形指定变量名称

4

我是R统计软件的新用户。我有一个大型的for循环,需要处理多个大文件,最终生成一张图表。

除了输出文件名之外,一切都正常。我想要做什么呢?

我正在使用

data1 <- read.csv("filepath/filename", header=TRUE, sep=",")
data2 <- read.csv("filepath/filename", header=TRUE, sep=",")
data3 <- read.csv("filepath/filename", header=TRUE, sep=",") 

等等……来读取我的文件。

我希望输出的图形文件名包含生成它的数据文件和列的名称。例如:

graph1-data1-data3-columnE.pdf

重要提示:我正在读取的所有文件都具有完全相同的列名和数量。

我应该使用什么命令来完成这个任务?


你可以使用?paste()来构建绘图的文件名。 - EDi
你好EDi。 我尝试使用粘贴功能,但是我找不到命令告诉R复制文件名,你能给我展示一下你所说的命令的样例吗? 谢谢。 - Error404
在读取您手动键入的文件时,需要将文件名存储在某个对象中。可以再次手动输入或使用像?list.files这样的函数。 - EDi
好的,现在我昨天已经做过这个了,但是我一整天都在尝试编写一个命令来使其工作,例如我将所有文件名存储在一个名为“fnames”的文件中,并且我已经保存了列名,就像“names.data1”函数中一样。输出命令是什么?pdf(filepath(paste(..............))什么?我无法理解paste命令本身。抱歉,但是我对这个命令感到困难! - Error404
1个回答

5
您可以使用 @EDi 指出的 pastepaste0sprintf 来解决它。我更喜欢后者,因为它具有非常干净的语法。在下面的例子中,%i(用于整数)被替换为id1d2的值,%s(用于字符串)被替换为col的值。
for(i in 1:n){
    ...
    d1 <- 1    # Index of the first data file
    d2 <- 3    # Index of the second data file
    col <- "E" # Column name
    ...
    outfile <- sprintf("Graph%i-data%i-data%i-column%s.pdf", i, d1, d2, col)
    pdf(outfile)
    ...
    dev.off()
}

一些通用建议

当你发现自己在创建名为data1data2data3等对象时,实际上是在伪造一个对象列表。相反,应该创建一个真正的列表,这样你的语法会更加简洁,易于阅读和编写。

# List all files named `data###.csv`, where ### is a number
my.files <- dir(".", "data[0-9]+\\.csv")

# Load all files in one go
my.data <- lapply(my.files, read.csv, header=TRUE, sep=",")

# Calculate the thing you are interested in        
n <- length(my.files)
for(i in 1:n){
    for(j in 1:n){
        # Do stuff
        pdf(sprintf("Graph-%i-%i.pdf", i, j))
        plot(my.data[[i]], my.data[[j]])
        dev.off()
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接