Подтвердить что ты не робот

Печать значений для нескольких переменных в одной строке изнутри цикла

У меня есть вопрос, который наверняка кажется очень тривиальным, но ответ всегда указывал мне: как вы печатаете значения для нескольких переменных в одной строке из цикла for?

Я представляю два решения, ни один из которых не опирается только на форматированный оператор print, и меня все еще интересует, может ли сам print использовать вывод в желаемом формате.

Сначала я представляю for-loop, который содержит одно решение, а затем представляю функцию, представляющую другое решение:

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-loop, чтобы оператор print сам возвращал выходные данные в формате my.output? Я знаю, что я мог бы также поместить матрицу внутри цикла for, который хранит значения r и interest, а затем печатает матрицу после завершения цикла. Тем не менее, я думал, что использование инструкции print будет проще, тем более, что мне не нужно сохранять значения r или interest.

Спасибо за любой совет. Извините, опять этот вопрос настолько тривиален. Я довольно долго искал ответ в течение длительного периода, но так и не нашел решения. Возможно, я представил достаточно решений в этом посте, чтобы сделать возможными дополнительные решения. Тем не менее, я по-прежнему заинтересован.

EDIT:

В дополнение к полезным ответам ниже я просто понял, что используя:

print (c(r, interest))

в приведенном выше for-loop также работает.

4b9b3361

Ответ 1

Попробуйте cat и sprintf в цикле for.

например.

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

Смотрите здесь

Ответ 2

В качестве дополнительной заметки нет необходимости в цикле for из-за векторизации R.

Это:

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 - вектор, выражение, содержащее его, выполняется для всех значений вектора.