![]() |
激动的充值卡 · The last packet sent ...· 7 月前 · |
![]() |
卖萌的皮蛋 · 邮箱无法接收Email - ...· 1 年前 · |
![]() |
奔跑的水桶 · replace blank values ...· 1 年前 · |
![]() |
苦闷的骆驼 · 用Git从Github上clone项目到Py ...· 1 年前 · |
c++ 字符串函数 substr |
https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/prog-type-char.html |
![]() |
神勇威武的红茶
1 年前 |
evalCpp()
转换单一计算表达式
cppFunction()
转换简单的C++函数—Fibnacci例子
sourceCpp()
转换C++程序—正负交替迭代例子
sourceCpp()
转换C++源文件中的程序—正负交替迭代例子
sourceCpp()
转换C++源程序文件—卷积例子
wrap()
把C++变量返回到R中
as()
函数把R变量转换为C++类型
as()
和
wrap()
的隐含调用
//[[Rcpp::export]]
sourceCpp()
函数中直接包含C++源程序字符串
cppFunction()
函数中直接包含C++函数源程序字符串
evalCpp()
函数中直接包含C++源程序表达式字符串
depends
指定要链接的库
invisible
要求函数结果不自动显示
clone
函数
is_na
seq_along
seq_len
pmin
和
pmax
ifelse
sapply
和
lapply
sign
diff
kable()
函数制作表格
...
是实际内容。如:
## C:\disk\course\math\nFinished!\n
注意其中
\n
也被当作普通字符解释了,
不再当作换行符。
原始字符串如果内容中包含了圆括号,
可以将边界的圆括号改为方括号
[]
或者大括号
{}
。
如果这样也不能避免歧义,
可以在开始和结尾加上相同个数的减号,
格式为
r"--(...)--"
,
其中
...
为实际内容,
减号个数可以根据需要增加。
针对字符型数据最常用的R函数是
paste()
函数。
paste()
用来连接两个字符型向量,
元素一一对应连接,
默认用空格连接。
如
paste(c("ab", "cd"), c("ef", "gh"))
结果相当于
c("ab ef", "cd gh")
。
paste()
在连接两个字符型向量时采用R的一般向量间运算规则,
而且可以自动把数值型向量转换为字符型向量。
可以作一对多连接,
如
paste("x", 1:3)
结果相当于
c("x 1", "x 2", "x 3")
。
用
sep=
指定分隔符,
如
paste("x", 1:3, sep="")
结果相当于
c("x1", "x2", "x3")
。
使用
collapse=
参数可以把字符型向量的各个元素连接成一个单一的字符串,
如
paste(c("a", "b", "c"), collapse="")
结果相当于
"abc"
。
toupper()
函数把字符型向量内容转为大写,
tolower()
函数转为小写。
比如,
toupper('aB cd')
结果为
"AB CD"
,
tolower(c('aB', 'cd'))
结果相当于
c("ab" "cd")
。
这两个函数可以用于不区分大小写的比较,
比如,不论x的值是
'JAN'
,
'Jan'
还是
'jan'
,
toupper(x)=='JAN'
的结果都为TRUE。
用
nchar(x, type='bytes')
计算字符型向量
x
中每个字符串的以字节为单位的长度,这一点对中英文是有差别的,
中文通常一个汉字占两个字节,英文字母、数字、标点占一个字节。
用
nchar(x, type='chars')
计算字符型向量
x
中每个字符串的以字符个数为单位的长度,这时一个汉字算一个单位。
在画图时可以用
strwidth()
函数计算某个字符串或表达式占用的空间大小。
substr(x, start, stop)
从字符串x中取出从第start个到第stop个的子串,
如果x是一个字符型向量,
substr
将对每个元素取子串。如
用
substring(x, start)
可以从字符串x中取出从第start个到末尾的子串。如
用
as.numeric()
把内容是数字的字符型值转换为数值,如
substr('JAN07', 4, 5) ## [1] "07" substr('JAN07', 4, 5) + 2000 ## Error in substr("JAN07", 4, 5) + 2000 : ## non-numeric argument to binary operator as.numeric(substr('JAN07', 4, 5)) + 2000 ## [1] 2007 as.numeric(substr(c('JAN07', 'MAR66'), 4, 5)) ## [1] 7 66
as.numeric()
是向量化的,
可以转换一个向量的每个元素为数值型。
用
as.character()
函数把数值型转换为字符型,如
如果自变量本来已经是字符型则结果不变。
为了用指定的格式数值型转换成字符型,
可以使用
sprintf()
函数,
其用法与C语言的
sprintf()
函数相似,
只不过是向量化的。例如
## [1] "file001.txt" "file099.txt" "file100.txt"
readr包的
parse_number()
输入一个字符串向量,
对每个字符串,
找到第一个能识别为数值的内容,
舍弃其它内容,
返回转换浮点型结果。
没有数值时返回缺失值,
并增加一个表格用来记录所有的不成功转换。
readr::parse_number(c( "123", "output-123.txt", "a123.456bc04", "30.2%", "abc"
## Warning: 1 parsing failure. ## row col expected actual ## 5 -- a number abc
## [1] 123.000 -123.000 123.456 30.200 NA ## attr(,"problems") ## # A tibble: 1 × 4 ## row col expected actual ## <int> <int> <chr> <chr> ## 1 5 NA a number abc
readr中还有
parse_integer
,parse_double
,parse_logical
,parse_character
等函数, 这些函数不允许要读取内容以外的内容存在, 比如readr::parse_number("text-123")
能正确读取-123
, 而readr::parse_integer("text-123")
则会返回缺失值, 并带有一个说明缺失情况的表格作为属性。6.8 字符串替换功能
用
gsub()
可以替换字符串中的子串, 这样的功能经常用在数据清理中。 比如,把数据中的中文标点改为英文标点, 去掉空格,等等。字符串
x
中分隔符既有逗号又有分号, 上面的程序用gsub()
把分号都换成逗号。6.9 正则表达式
正则表达式(regular expression)是一种匹配某种字符串模式的方法。 用这样的方法,可以从字符串中查找某种模式的出现位置, 替换某种模式,等等。 这样的技术可以用于文本数据的预处理, 比如用网络爬虫下载的大量网页文本数据。 R中支持perl语言格式的正则表达式,
grep()
和grepl()
函数从字符串中查询某个模式,sub()
和gsub()
替换某模式。 下面的程序把多于一个空格替换成一个空格## [1] "a cat in a box"