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

重要な注意:私が読んでいるすべてのファイルは、まったく同じ列名と番号を持っています。

これを行うにはどのコマンドを使用する必要がありますか?

4

1 に答える 1

5

paste@EDiが指摘したように、paste0またはを使用して解決できますsprintf。構文が非常にクリーンなので、後者の方が好きです。次の例%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()
}

いくつかの一般的なアドバイス

、などの名前data1のオブジェクトを作成していることに気付いたときは、基本的にオブジェクトのリストを偽造しています。代わりに適切なリストを作成すると、構文がよりコンパクトになり、読み取りと書き込みが容易になります。data2data3

# 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()
    }
}
于 2012-11-15T14:28:45.297 に答える