paste / paste0和str_c有什么区别?

时间:2018-06-12 13:52:11

标签: r stringr

我似乎没有看到paste / paste0str_c之间的差异,因为它将单个矢量合并为一个字符串,将多个字符串合并为一个字符串,或将多个矢量合并为一个字符串单个字符串。

在我写这个问题时,我发现了这个问题:https://www.rdocumentation.org/packages/stringr/versions/1.3.1/topics/str_c。 richie@datacamp.com的社区示例说,区别在于str_c将空白视为空白(而不是NAs)并且更适当地回收。还有其他差异吗?

2 个答案:

答案 0 :(得分:6)

paste0(..., collapse = NULL)paste(..., sep = "", collapse = NULL)的包装器,这意味着没有分隔符。换句话说,使用paste0()时,您无法应用某种分隔符,而paste()则选择该选项,而单个空格是默认选项。

str_c(..., sep = "", collapse = NULL)相当于paste(),这意味着您可以选择自定义所需的分隔符。不同之处在于str_c()默认为无分隔符,因此默认情况下就像paste0()一样。

Paste()paste0()都是基本包中的函数,而str_c()来自stringr包。

我没有测试/微基准测试,但根据我的经验,我同意Ryan str_c()通常更快。

答案 1 :(得分:0)

在我看来,str_c()paste()与其他命令结合使用时,处理外来字符的方式有所不同,但是我不知道为什么以及何时确切。一个例子:

a <- str_c("folder/","confidential_file_with_foreign_letters_like_š.xlsx")
b <- paste0("folder/","confidential_file_with_foreign_letters_like_š.xlsx")

输出相同(a==b),但是readxl::excel_sheets(a)给出如下错误消息:

Error: Evaluation error: zip file 'folder/","confidential_file_with_foreign_letters_like_Å¡.xlsx' cannot be opened.

同时readxl::excel_sheets(b)成功提取excel工作表名称。 如果有人知道为什么会这样,我会很感兴趣。