2015-09-06 24 views
2

基本R函數pastepaste0允許連接字符串(顯然稱爲R中的字符)。如何將字符串連接到可能的空字符向量的每個元素?

例如:

>new_people <- c(" R. A. Becker", "J. M. Chambers", "A. R. Wilks") 
>paste0("Hello ",new_people,"!") 
[1] "Hello R. A. Becker!" "Hello J. M. Chambers!" "Hello A. R. Wilks!" 

然而,如果一個參數爲長度爲零(character())的,它的行爲不一致的和意想不到的(我):

> new_people <- character() 
> paste0("Hello ",new_people,"!") 
[1] "Hello !" 

此行爲被描述(但不動機)在?paste

向量參數被回收爲neede d,零長度參數被循環到「」。 [...] 值: 連接值的字符向量。如果所有對象都是零,那麼它的長度爲零,除非collapse爲非NULL,在這種情況下它是單個空字符串。

如果您沒有發現它「不一致」,但想象一下Equivalent of R's paste command for vector of numbers in Python的答案,它將真正重現paste的行爲。

爲了避免我的代碼混亂,我沒有成功搜索paste的替代函數或參數,它們只會回收長度爲1的參數。 @ hadley的stringr軟件包中的str_c函數都沒有提供這種行爲。

是否有替代方法粘貼(和paste0)的行爲一致w.r.t.零長度參數(即在這種情況下返回零長度字符向量,如果collapse不是NULL,則返回空字符串)?

回答

1

在寫這個問題,我發現了一個幾乎滿意答案:

> new_people <- c(" R. A. Becker", "J. M. Chambers", "A. R. Wilks") 
> sprintf("Hello %s!",new_people) 
[1] "Hello R. A. Becker!" "Hello J. M. Chambers!" "Hello A. R. Wilks!" 
> new_people <- character() 
> sprintf("Hello %s!",new_people) 
character(0) 

然而,這缺乏變量和它們是paste有,而且需要額外周邊paste(..., collapse="~")如果一個人想在字符串中的位置之間的好的聯動將琴絃揉在一起。

相關問題