我似乎没有看到paste
/ paste0
和str_c
之间的差异,因为它将单个矢量合并为一个字符串,将多个字符串合并为一个字符串,或将多个矢量合并为一个字符串单个字符串。
在我写这个问题时,我发现了这个问题:https://www.rdocumentation.org/packages/stringr/versions/1.3.1/topics/str_c。 richie@datacamp.com的社区示例说,区别在于str_c
将空白视为空白(而不是NAs)并且更适当地回收。还有其他差异吗?
答案 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工作表名称。
如果有人知道为什么会这样,我会很感兴趣。