Strings-通过变量创建字符串

问题

你想要通过变量创建一个字符串。

方案

两种从变量创建字符串的通用方法是使用paste()sprintf()函数。对向量来说,paste更加有用;sprintf则常用于对输出实现精确的控制。

使用paste()

a <- "apple"
b <- "banana"

# 将a,b变量内容连到一起,并用空格隔开
paste(a, b)
#> [1] "apple banana"

# 如果不想要空格,可以设定参数sep="",或使用函数 paste0():
paste(a, b, sep="")
#> [1] "applebanana"
paste0(a, b)
#> [1] "applebanana"

# 用逗号加空格分开:
paste(a, b, sep=", ")
#> [1] "apple, banana"


# 设定一个字符向量
d <- c("fig", "grapefruit", "honeydew")

# 如果输入是一个向量,输出会将其每个元素堆叠到一起:
paste(d, collapse=", ")
#> [1] "fig, grapefruit, honeydew"

# 如果输入是一个标量和一个向量, 结果会将标量与向量里每个元素放到一起
# 并返回一个向量(这是R向量化操作的循环对齐原则):
paste(a, d)
#> [1] "apple fig"        "apple grapefruit" "apple honeydew"

# 使用 sep 和 collapse参数:
paste(a, d, sep="-", collapse=", ")
#> [1] "apple-fig, apple-grapefruit, apple-honeydew"

使用sprintf()

另一种方式是使用sprintf函数,它来自于C语言。

想要在字符串或字符变量中进行取代操作,使用%s

a <- "string"
sprintf("This is where a %s goes.", a)
#> [1] "This is where a string goes."

如果是整数,可以使用%d或它的变体:

x <- 8
sprintf("Regular:%d", x)
#> [1] "Regular:8"

# 可以输出到字符串,以空格开头。
sprintf("Leading spaces:%4d", x)
#> [1] "Leading spaces:   8"

# 也可以使用0替代
sprintf("Leading zeros:%04d", x)
#> [1] "Leading zeros:0008"

对浮点数,使用%f进行标准释义,而%e活着%E则代表指数。你也可以使用%g或者%G让程序自动帮你进行两种格式的转换,这取决于你的有效位数。下面是R help页面中关于sprintf的例子:

sprintf("%f", pi)         # "3.141593"
sprintf("%.3f", pi)       # "3.142"
sprintf("%1.0f", pi)      # "3"
sprintf("%5.1f", pi)      # "  3.1"
sprintf("%05.1f", pi)     # "003.1"
sprintf("%+f", pi)        # "+3.141593"
sprintf("% f", pi)        # " 3.141593"
sprintf("%-10f", pi)      # "3.141593  "   (左对齐)
sprintf("%e", pi)         #"3.141593e+00"
sprintf("%E", pi)         # "3.141593E+00"
sprintf("%g", pi)         # "3.14159"
sprintf("%g",   1e6 * pi) # "3.14159e+06"  (指数化)
sprintf("%.9g", 1e6 * pi) # "3141592.65"   ("修正")
sprintf("%G", 1e-6 * pi)  # "3.14159E-06"

%m.nf格式规范中:m代表域宽,它是输出字符串中字符的最小位数,可以以空格或0开头。n代表精度,它指小数点后的数字位数。

其他混合操作:

x <- "string"
sprintf("Substitute in multiple strings: %s %s", x, "string2")
#> [1] "Substitute in multiple strings: string string2"

# To print a percent sign, use "%%"
sprintf("A single percent sign here %%")
#> [1] "A single percent sign here %"

注意

关于更多脚本输出的信息可以查看this page

人该是自己生活的主宰,而不是别人手里的行货