27

非常に些細なことに思える質問がありますが、その答えは常に私をほのめかしてきました: for ループ内から同じ行に複数の変数の値を出力するにはどうすればよいでしょうか?

どちらも書式設定されたステートメントに依存する 2 つの解決策を提示しますが、それ自体を使用して目的の形式で出力を返すことができるprintかどうかに興味があります。print

まずfor-loop、1 つの解を含む を提示し、次に別の解を表す関数を提示します。

P <- 243.51
t <- 31 / 365
n <- 365

for (r in seq(0.15, 0.22, by = 0.01)) {

     A <- P * ((1 + (r/ n))^ (n * t))
     interest <- A - P

     # this prints each variable on a separate line
     print (r)
     print (interest)

     # this does not work
     # print c(r, interest)

     # this presents both variables on the same line, as desired
     output <- c(r,interest)
     print(output)

     # EDIT - I just realized the line below prints output in the desired format
     print (c(r, interest))

}


# this function also returns output in the desired format

data.fn <- function(r) {

     interest <- P*(1+(r/ n))^(n*t) - P
     list(r = r, interest = interest)

}

my.output <- as.data.frame(data.fn(seq(0.15, 0.22, by = 0.01)))
my.output

#      r interest
# 1 0.15 3.121450
# 2 0.16 3.330918
# 3 0.17 3.540558
# 4 0.18 3.750370
# 5 0.19 3.960355
# 6 0.20 4.170512
# 7 0.21 4.380842
# 8 0.22 4.591345

ステートメント自体が のようにフォーマットされた出力を返すように、printステートメントをフォーマットする方法はありますか? 値を格納する for ループ内に行列を配置し、ループの終了後に行列を出力することもできます。ただし、特にorの値を保持する必要がないため、ステートメントを使用する方が簡単だと思いました。for-loopprintmy.outputrinterestprintrinterest

アドバイスありがとうございます。申し訳ありませんが、この質問はとても些細なことです。私は長期間にわたって答えをかなり探しましたが、解決策は見つかりませんでした。おそらく、この投稿で十分な解決策を提示したため、追加の可能な解決策がやり過ぎになる可能性があります。それにもかかわらず、私は興味を持ち続けます。

編集:

以下の役立つ回答に加えて、次を使用していることに気付きました。

print (c(r, interest))

上記でfor-loopも動作します。

4

2 に答える 2

23

forループで試してみてくださいcatsprintf

例えば。

cat(sprintf("\"%f\" \"%f\"\n", df$r, df$interest))

こちらをご覧ください

于 2012-04-15T08:29:55.207 に答える
4

追記として、R のベクトル化のため、for ループは必要ありません。

これ:

P <- 243.51
t <- 31 / 365
n <- 365

for (r in seq(0.15, 0.22, by = 0.01))    
     A <- P * ((1 + (r/ n))^ (n * t))
     interest <- A - P
}

次と同等です。

P <- 243.51
t <- 31 / 365
n <- 365
r <- seq(0.15, 0.22, by = 0.01)
A <- P * ((1 + (r/ n))^ (n * t))
interest <- A - P

はベクトルであるためr、それを含む上記の式は、ベクトルのすべての値に対して実行されます。

于 2012-04-15T08:35:26.833 に答える