如果我有一个字符类型的向量,我如何将值连接成字符串呢?下面是我用 paste() 的方法:
sdata = c('a', 'b', 'c') paste(sdata[1], sdata[2], sdata[3], sep ='')
产生"abc"。当然,只有提前知道 sdata 的长度,这才有效。
"abc"
hfyxw5xn1#
尝试在paste函数中使用空的collapse参数:paste(sdata, collapse = '')多亏了http://twitter.com/onelinetips/status/7491806343
paste(sdata, collapse = '')
bf1o4zei2#
马特的答案绝对是正确的,不过,这里有一个替代的解决办法,为漫画救济的目的:
do.call(paste, c(as.list(sdata), sep = ""))
798qvoo83#
您可以使用stringi包中带有collapse参数的stri_paste函数,如下所示:
stringi
collapse
stri_paste
stri_paste(letters, collapse='') ## [1] "abcdefghijklmnopqrstuvwxyz"
还有一些基准:
require(microbenchmark) test <- stri_rand_lipsum(100) microbenchmark(stri_paste(test, collapse=''), paste(test,collapse=''), do.call(paste, c(as.list(test), sep=""))) Unit: microseconds expr min lq mean median uq max neval stri_paste(test, collapse = "") 137.477 139.6040 155.8157 148.5810 163.5375 226.171 100 paste(test, collapse = "") 404.139 406.4100 446.0270 432.3250 442.9825 723.793 100 do.call(paste, c(as.list(test), sep = "")) 216.937 226.0265 251.6779 237.3945 264.8935 405.989 100
brgchamk4#
对于sdata:
sdata
gsub(", ", "", toString(sdata))
对于整数向量:
gsub(", ", "", toString(c(1:10)))
k5hmc34c5#
马特·特纳的答案绝对是正确的。然而,按照肯·威廉姆斯的答案,你也可以这样做:
capture.output(cat(sdata, sep=""))
i1icjdpr6#
库stringr提供了一些快速的方法来完成此任务。
stringr
字符串_展平
默认情况下,将折叠字符向量,不带空格,但也有collapse参数:
str_flatten(sdata) [1] "abc"
还有一个可选的last参数,用于代替最后一个分隔符。
last
字符串_c
与paste类似,使用collapse参数时,您需要指定以下内容来完成此操作:
paste
str_c(sdata, collapse = "") [1] "abc"
字符串扁平逗号
如果要使用逗号分隔的折叠,则从stringr 1.5.0起新增。此处last参数可识别Oxford逗号:
str_flatten_comma(sdata) [1] "a, b, c" str_flatten_comma(sdata[1:2], last = " and ") [1] "a and b"
基础::粘贴0
虽然这里没有paste的明显优势,但您可以使用以R为基数的paste0(sdata, collapse = "")。在我的机器上,为更长的字符串向量更新基准测试得到了以下结果:
paste0(sdata, collapse = "")
set.seed(4) x <- sample(letters, 1E6, replace = T) microbenchmark(stri_paste(x, collapse=''), paste(x,collapse=''), do.call(paste, c(as.list(x), sep="")), stringr::str_flatten(x), stringr::str_c(x, collapse = ""), paste0(x, collapse = "")) Unit: milliseconds expr min lq mean median uq max neval cld stri_paste(x, collapse = "") 21.1788 21.80040 23.45225 22.78430 24.4271 39.1305 100 a paste(x, collapse = "") 110.7734 114.36595 126.43277 119.02755 136.5902 187.4112 100 b do.call(paste, c(as.list(x), sep = "")) 538.8329 981.80345 1090.51738 1096.33470 1213.8848 1457.5622 100 c stringr::str_flatten(x) 20.6276 21.60610 23.36241 22.73915 24.2210 42.3481 100 a stringr::str_c(x, collapse = "") 20.9274 21.74285 23.75466 22.73950 24.3254 36.6114 100 a paste0(x, collapse = "") 110.0614 112.81175 124.15555 116.96610 130.6330 168.7199 100 b
同样本着肯·威廉姆斯回答的精神:
Reduce(paste0, sdata) [1] "abc"
sqserrrh7#
另一种方法是使用glue包:
glue
glue_collapse(glue("{sdata}")) paste(glue("{sdata}"), collapse = '')
x8goxv8g8#
这里有一个实用函数,它可以将一个命名的或未命名的值列表折叠成一个字符串,以便于打印,它还可以打印代码行本身,它来自我的list examples in R页面。生成一些已命名或未命名的列表:
# Define Lists ls_num <- list(1,2,3) ls_str <- list('1','2','3') ls_num_str <- list(1,2,'3') # Named Lists ar_st_names <- c('e1','e2','e3') ls_num_str_named <- ls_num_str names(ls_num_str_named) <- ar_st_names # Add Element to Named List ls_num_str_named$e4 <- 'this is added'
下面是一个将命名或未命名列表转换为字符串的函数:
ffi_lst2str <- function(ls_list, st_desc, bl_print=TRUE) { # string desc if(missing(st_desc)){ st_desc <- deparse(substitute(ls_list)) } # create string st_string_from_list = paste0(paste0(st_desc, ':'), paste(names(ls_list), ls_list, sep="=", collapse=";" )) if (bl_print){ print(st_string_from_list) } }
使用之前创建的列表测试函数:
> ffi_lst2str(ls_num) [1] "ls_num:=1;=2;=3" > ffi_lst2str(ls_str) [1] "ls_str:=1;=2;=3" > ffi_lst2str(ls_num_str) [1] "ls_num_str:=1;=2;=3" > ffi_lst2str(ls_num_str_named) [1] "ls_num_str_named:e1=1;e2=2;e3=3;e4=this is added"
使用列表元素的子集测试函数:
> ffi_lst2str(ls_num_str_named[c('e2','e3','e4')]) [1] "ls_num_str_named[c(\"e2\", \"e3\", \"e4\")]:e2=2;e3=3;e4=this is added" > ffi_lst2str(ls_num[2:3]) [1] "ls_num[2:3]:=2;=3" > ffi_lst2str(ls_str[2:3]) [1] "ls_str[2:3]:=2;=3" > ffi_lst2str(ls_num_str[2:4]) [1] "ls_num_str[2:4]:=2;=3;=NULL" > ffi_lst2str(ls_num_str_named[c('e2','e3','e4')]) [1] "ls_num_str_named[c(\"e2\", \"e3\", \"e4\")]:e2=2;e3=3;e4=this is added"
8条答案
按热度按时间hfyxw5xn1#
尝试在paste函数中使用空的collapse参数:
paste(sdata, collapse = '')
多亏了http://twitter.com/onelinetips/status/7491806343
bf1o4zei2#
马特的答案绝对是正确的,不过,这里有一个替代的解决办法,为漫画救济的目的:
798qvoo83#
您可以使用
stringi
包中带有collapse
参数的stri_paste
函数,如下所示:还有一些基准:
brgchamk4#
对于
sdata
:对于整数向量:
k5hmc34c5#
马特·特纳的答案绝对是正确的。然而,按照肯·威廉姆斯的答案,你也可以这样做:
i1icjdpr6#
库
stringr
提供了一些快速的方法来完成此任务。字符串_展平
默认情况下,将折叠字符向量,不带空格,但也有
collapse
参数:还有一个可选的
last
参数,用于代替最后一个分隔符。字符串_c
与
paste
类似,使用collapse
参数时,您需要指定以下内容来完成此操作:字符串扁平逗号
如果要使用逗号分隔的折叠,则从
stringr
1.5.0起新增。此处last
参数可识别Oxford逗号:基础::粘贴0
虽然这里没有
paste
的明显优势,但您可以使用以R为基数的paste0(sdata, collapse = "")
。在我的机器上,为更长的字符串向量更新基准测试得到了以下结果:
同样本着肯·威廉姆斯回答的精神:
sqserrrh7#
另一种方法是使用
glue
包:x8goxv8g8#
这里有一个实用函数,它可以将一个命名的或未命名的值列表折叠成一个字符串,以便于打印,它还可以打印代码行本身,它来自我的list examples in R页面。
生成一些已命名或未命名的列表:
下面是一个将命名或未命名列表转换为字符串的函数:
使用之前创建的列表测试函数:
使用列表元素的子集测试函数: