2012-04-15 85 views
15

Tôi có một câu hỏi chắc chắn có vẻ rất tầm thường, nhưng câu trả lời luôn ám chỉ tôi: cách bạn in các giá trị cho nhiều biến trên cùng một dòng từ trong vòng một vòng lặp?Giá trị in cho nhiều biến trên cùng một dòng từ trong vòng một vòng lặp

Tôi trình bày hai giải pháp không phụ thuộc vào gì ngoài tuyên bố print được định dạng và tôi vẫn quan tâm đến việc liệu print có thể được sử dụng để trả về kết quả theo định dạng mong muốn hay không.

Trước tiên tôi trình bày các for-loop, trong đó có một giải pháp, và sau đó tôi trình bày một chức năng đại diện cho một giải pháp:

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 

Có cách nào để định dạng print báo cáo trong for-loop để báo cáo kết quả print, tự nó trả về kết quả đầu ra được định dạng là my.output? Tôi biết rằng tôi cũng có thể đặt một ma trận bên trong vòng lặp để lưu trữ các giá trị của rinterest và sau đó in ma trận sau khi kết thúc vòng lặp. Tuy nhiên, tôi nghĩ rằng việc sử dụng câu lệnh print sẽ dễ dàng hơn, đặc biệt là vì tôi không cần giữ lại các giá trị của r hoặc interest.

Cảm ơn bạn đã được tư vấn. Xin lỗi một lần nữa câu hỏi này là rất tầm thường. Tôi đã tìm kiếm khá nhiều câu trả lời trong một thời gian dài, nhưng chưa bao giờ tìm ra giải pháp. Có lẽ tôi đã trình bày đủ các giải pháp trong bài đăng này để làm cho các giải pháp bổ sung có thể vượt quá. Tuy nhiên, tôi vẫn quan tâm.

EDIT:

Ngoài các câu trả lời hữu ích dưới đây, tôi chỉ nhận ra rằng việc sử dụng:

print (c(r, interest)) 

ở trên for-loop cũng làm việc.

+0

Hãy xem mèo thay vì in. –

+0

Cảm ơn. Tất cả phản hồi đều tuyệt vời. Đó là lý do tại sao tôi yêu trang web này. –

Trả lời

15

Hãy thử catsprintf trong vòng lặp for của bạn.

ví dụ:

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

Xem here

3

Là một lưu ý bổ sung, không có nhu cầu sử dụng cho vòng lặp vì vector R.

này:

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 
} 

tương đương với:

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 là một vector, biểu thức trên có chứa nó được thực hiện cho tất cả các giá trị của vector.

Các vấn đề liên quan