2015-09-06 26 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="~")如果一个人想在字符串中的位置之间的好的联动将琴弦揉在一起。

相关问题