您可以使用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()
}
一些一般性建议
每当您发现自己创建了名为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()
}
}