将变量名称分配给R中的输出图

Err*_*404 4 variables filenames r graph assign

我是R statistics的新用户.我有一个巨大的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=",") 
Run Code Online (Sandbox Code Playgroud)

等等...阅读我的文件.

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

graph1-data1-data3-columnE.pdf
Run Code Online (Sandbox Code Playgroud)

重要说明:我正在阅读的所有文件都具有完全相同的列名和编号.

我应该用什么命令来做这件事?

Bac*_*lin 5

您可以使用paste@EDi指出来解决它,paste0或者sprintf.我更喜欢后者,因为它具有非常干净的语法.在下面的示例中%i(对于整数)替换为值i,d1并且d2%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()
}
Run Code Online (Sandbox Code Playgroud)

一些一般性建议

当你发现自己创建命名对象data1,data2,data3等等,你基本上是伪造的对象的列表.改为制作一个正确的列表,您的语法将更紧凑,更易于阅读和编写.

# 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()
    }
}
Run Code Online (Sandbox Code Playgroud)