当前位置: 首页 > article >正文

R语言——字符串

参考资料:学习R

        文本数据存储在字符向量中。重要的是,字符向量中的每个元素都是字符串,而非单独的字符。

        文本的基本单位是字符向量,着意味着大部分字符串处理函数也能用于字符向量。

1、创建和打印字符串

        字符向量可用c函数创建。我们可以用单引号或双引号把字符串引起来,只要引号之间匹配即可。建议使用双引号。

        paste函数能将不同字符串组合起来。在它传入的参数向量中,每个元素都能够自我循环以达到最长的矢量长度,然后字符串就被拼接在一起,中间以空格分开。可以使用参数sep更改分隔符,或使用相关的paste0函数去掉分隔符。所有的字符串组合后,可使用collapse参数把结果收缩成一个包含所有元素的字符串。

paste(c("red","yellow"),"lorry")
paste(c("red","yellow"),"lorry",sep="-")
paste(c("red","yellow"),"lorry",collapse=", ")
paste0(c("red","yellow"),"lorry")

        toString函数是paste的变种,它在打印向量时非常有用。它使用逗号和空格分隔每个元素,且可限制打印的数量。

x<-(1:15)^2
toString(x)
toString(x,width=40)

        cat是一个低级函数,很少直接调用它

        通常情况下,当字符串打印到控制台时,它们会议双引号括起来。如果对它们使用noquote函数,就可以去掉这些引号。有时,这会使文本更具可读性。

x<-c("I","saw","a","saw","that","could","out",
     "saw","any","other","saw","I","ever","saw")
y<-noquote(x)
print(x)
print(y)

2、格式化数字

        有几个函数可用于数字的格式化。formatC可以让我们用C语言的格式化风格来指定使用固定型或科学型的格式、小数的位数以及输出的宽度。无论使用哪种选项,输入都应该是numeric类型,且输出是character字符向量或数组:

pow<-1:3
powers_of_e<-exp(pow)
formatC(powers_of_e)
# 指定3个数字
formatC(powers_of_e,digits=3)
# 前面加上空格
formatC(powers_of_e,digits=3,width=10)
# 科学格式
formatC(powers_of_e,digits=3,format="e")
# 前面加上+
formatC(powers_of_e,digits=3,flag="+")

        R还提供了更通用的C风格的格式化函数sprintf。与sprintf在其他语言中的工作方式一眼:第一个参数包含字符串或数字变量的占位符,其他参数则将逐个代入这些占位符。不过请注意,R中大部分的数值是浮点型的而非整数型的

        sprintf的第一个参数指定了一个格式化字符串,其中包括其他值得占位符。例如:%s代表另一个字符串,%f和%e分别代表固定型格式和科学型格式的浮点数,%d表示整数。其他参数的值将替换占位符。与paste函数类似,较短长度的输入将循环自身以匹配最长的输入。

sprintf("%s %d = %f","Euler's constant to the power",pow,powers_of_e)
sprintf("To three decimal places, e ^ %d = %.3f",pow,powers_of_e)
sprintf("In scientific notation, e ^ %d = %e",pow,powers_of_e)

        其他格式化数字的方法有format和prettyNum两个函数。format提供的格式化字符串的语法与formatC的用法基本类似。而prettyNum则非常适合于格式化那些非常大火非常小的数字:

format(powers_of_e)
# 保留2位小数
format(powers_of_e,digits=3)
# 去掉多余的0
format(powers_of_e,digits=3,trim=TRUE)
# 保留两位小数的科学计数
format(powers_of_e,digits=3,scientific = TRUE)
# 使用prettyNum函数
prettyNum(
  c(1e10,1e-20),
  big.mark = ",",
  small.mark = " ",
  preserve.width = "individual",
  scientific=FALSE
)

3、特殊字符

        有一些特殊字符可以被包含在字符串中。例如,我们可以通过\t插入一个制表符。在下例中,我们使用cat而非print,因为print执行的额外转换动作会把制表符\t转换成反斜杠和一个t。cat的参数fill=TRUE使光标在一行结束后移动到下一行:

cat("foo\tbar",fill=TRUE)

        将光标移动到下一行是通过打印换行符\N完成的(在R中,不要使用\r或\r\n来打印换行符,因为\r会将光标移动到当前行的开始并覆盖我们所写的内容);

cat("foo\nbar",fill=TRUE)

        打印反斜杠时需要连续输入两个反斜杠,以免被误认为是特殊字符:

cat("foo\\bar",fill=TRUE)

        如果我们需要在字符串中使用双引号,那么双引号前必须添加一个反斜杠来转义。同样,如果我们要在字符串中使用单引号,则单引号需要被转义:

cat("foo'bar",fill=TRUE)
cat("foo\'bar",fill=TRUE)
cat("foo\"bar",fill=TRUE)

        与之相反,如果在被双引号引用的字符串中使用单引号,或在单引号引用的字符串中使用双引号,则并不需要对其进行转义。

        通过打印警报符\a能让我们的电脑发出提示音,不过alarm函数也能完成此功能且可读性更好。当想要程序在一个耗时很长的分析任务结束后主动通知我们,可以使用这个函数。

4、更改大小写

        使用toupper和tolower函数能把字符串中的字符全部转换为大写或小写:

toupper("I'm Shouting")
tolower("I'm Whispering")

5、截取字符串

        有两个函数可以用于从字符串中截取子串:substring和substr。在大多数情况下,我们可以任意使用其中一个。不过,如果我们传入了不同长度的向量参数,它们的行为会略有不同。对substring来说,输出的长度与最长的输入一样;而对于substr函数来说,输出的长度只与第一个输入的相等:

woodchuck<-c(
  "How much wood would a woodchuck chuck",
  "If a woodchuck could chuck wood",
  "He would chuck, he would, as much as he could",
  "And chuck as much wood as a woodchuck would",
  "If a woodchuck could chuck wood."
)
substring(woodchuck,1:6,10)
substr(woodchuck,1:6,10)

6、分割字符串

        paste及其相关函数能把字符串组合起来。strsplit则正好相反,它在指定的某些点上分割字符串。我们可以把上例中的字符串按照空格分开。在下面,fixed=TRUE意味着split的参数是固定长度的字符串而非正则表达式:

strsplit(woodchuck," ",fixed=TRUE)

        注意,strsplit返回的是列表(而非字符向量或矩阵)。这是因为它的结果可能由不同长度的字符向量组成。

        在我们的例子中,某些词最后的逗号有些烦人。最好的方法是在空格分割符前加一个可选的逗号,使用正则表达式就很容易搞定,?意味着“前面的字符可选”:

strsplit(woodchuck,",? ")

7、文件路径

        R有一个工作目录,默认为文件被读写的地方。我们可以使用getwd查看它的位置,并使用setwd来改变它:

getwd()
setwd("C:/users/...")

        这里需要注意,每个路径的目录部分由正斜杠分隔。我们也可以使用双反斜杠来表示Windows的路径,不过正斜杠仍为首选。

        我们可以使用file.path来从各个目录中创建文件路径。它会自动地在目录名称之间插入正斜杠:

file.path("C:","Program Files","R","R-devel")

        路径可以是绝对路径(从驱动器名称或网络共享处开始)或相对路径(相对于当前工作目录)。在后一种情况中,.用于当前目录,..用于父目录,~代表当前用户主目录。path.expand能将相对路径转换为绝对路径:

path.expand(".")
path.expand("..")
path.expand("~")

        basename只返回文件名,而不包括前面的目录位置。与之相反,dirname只返回文件的目录。

file_name <- "C:/Program Files/R/R-devel/bin/x64/RGui.exe"
basename(file_name)
dirname(file_name)


http://www.kler.cn/a/600790.html

相关文章:

  • 一文解读DeepSeek的安全风险、挑战与应对策略
  • C#基础学习(一)复杂数据类型之枚举
  • 【Linux】从开发到系统管理深入理解环境变量
  • RocketMQ 详细知识点总结
  • 文章记单词 | 第2篇(六级)
  • STM32/GD32主要学习内容
  • K8s的网络
  • Java高频面试之集合-18
  • 目录遍历漏洞复现
  • 从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.2文本生成逻辑:Top-k采样与温度控制
  • Vibe Coding:编程的未来?
  • Rust Web 开发新选择:探索 Hyperlane 轻量级 HTTP 服务器框架
  • 《TypeScript 面试八股:高频考点与核心知识点详解》
  • 智慧医院、养老人员高精度定位解决方案
  • 【netstat和ss】Windows和Linux下的,网络连接排查简单案例
  • Unity射击游戏手榴弹笔记
  • 深度学习算法清单
  • 1.认识Excel
  • K8S遇到过的比较深刻的Pod问题
  • 【留一下记录】Vllm在Linux环境下的学习笔记