2011-06-23 22 views
6

Kullanıyorum R. Şehirlerin bir vektörüne sahip olduğumu varsayalım ve bu şehir adlarını tek tek dizesinde kullanmak istiyorum.Bir dizedeki bir öğeye farklı değerler atama

city = c("Dallas", "Houston", "El Paso", "Waco") 

phrase = c("Hey {city}, what's the meaning of life?") 

Yani dört ayrı ifadeler ile bitirmek istiyorum.

"Hey Dallas, what's the meaning of life?" 
"Hey Houston, what's the meaning of life?" 
... 

bir işlev bana basit/verimli bir şekilde bu görevi gerçekleştirmek için izin verecektir Python formatında() benzer var mı?

Aşağıdaki gibi bir şeyden kaçınmak istersiniz.

for(i in city){ 
    phrase = c("Hey ", i, "what's the meaning of life?") 
} 

cevap

14

sprintf nasıl olur?

> city = c("Dallas", "Houston", "El Paso", "Waco") 
> phrase = c("Hey %s, what's the meaning of life?") 
> sprintf(phrase, city) 
[1] "Hey Dallas, what's the meaning of life?" "Hey Houston, what's the meaning of life?" 
[3] "Hey El Paso, what's the meaning of life?" "Hey Waco, what's the meaning of life?" 
+0

1 vs çiftlerde doğru biçimlendirme gibi olsa avantajları bir yeri vardır! – ATMathew

+0

Baskı yok, ancak printf <- function (format_string, ...) {cat (sprintf (format_string, ...))} ile kendi başınızı döndürebilirsiniz – Zach

7

olması gerekenden ne kadar karmaşık bağlı olarak, basit bir macun iş yapabilirdi:

paste("Hey ", city, ", what's the meaning of life", sep="") 

istediğini yapar. Zach'in cevap @

, sprintf asla sprintf() sayesinde biliyordu

İlgili konular