《Learning R》笔记 Chapter 7 上 String

构筑/连接

构筑一个string类型的vector,最常用的是c()函数。同时paste()函数也很常用。

paste (..., sep = " ", collapse = NULL)
paste0(..., collapse = NULL) #默认不间隔
# sep : a character string to separate the terms.
#collapse : an optional character string to separate the results
> paste(letters[2:6] , '1' , sep='$')
[1] "b$1" "c$1" "d$1" "e$1" "f$1"
> paste(letters[2:6] , '1' , sep='$' , collapse = '+')
[1] "b$1+c$1+d$1+e$1+f$1" #collapse使用的字符不会在最后出现
> paste(letters,sep = '',collapse = '')
[1] "abcdefghijklmnopqrstuvwxyz"
>paste(letters,letters,letters,sep = '+') #可以paste3个或3个以上的string
 [1] "a+a+a" "b+b+b" "c+c+c" "d+d+d" "e+e+e" "f+f+f" "g+g+g" "h+h+h" "i+i+i" "j+j+j" "k+k+k" "l+l+l"
[13] "m+m+m" "n+n+n" "o+o+o" "p+p+p" "q+q+q" "r+r+r" "s+s+s" "t+t+t" "u+u+u" "v+v+v" "w+w+w" "x+x+x"
[25] "y+y+y" "z+z+z"

toString()函数只接受一个string,输出一个string。新的string格式更漂亮。

 > toString(letters) # 默认使用逗号间隔
[1] "a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z"
> toString(letters , width = 20) #手动控制输出长度
[1] "a, b, c, d, e, f...."

cat()是R的一个底层函数。print()等众多函数都以其为基础。
noquote()是print()的一个wrapper,能打印出无双引号的字符串。

格式化/Formatting

R的底层是C,因此sprintf()函数能够按照C风格的通用格式来格式化字符串。formatC()函数也有类似功能。值得指出的是,这些R函数都是接受vector输入的。

> sprintf('the value of num %s is %.2f.' , 1:3 , rnorm(3))
[1] "the value of num 1 is -0.03." "the value of num 2 is -0.23." "the value of num 3 is -0.20."

format()的语法类似于formatC() 。它和prettyNum()一样能够输出格式更美观的string。

特殊字符

\t是制表符,\n是换行,\才是普通的‘\’。这一点类似于其他语言。但这些特殊符号不能在print()下实现(会被转换为普通字符),书里使用的是cat()函数。

大小写

toupper() 和 tolower() 无需多言

提取(extract)

提取单个字符串的一部分可以直接使用[],但要提取一个character vector时,就要使用substr和substring两个函数。二者在大部分时间是相似的,他们的细微差别在于:

For substr, a character vector of the same length and with the same attributes as x;
For substring, a character vector of length the longest of the arguments.

substr(x, start, stop)
substring(text, first, last = 1000000L) 
#换言之,如果first或last里输入了比text还要长(length)的vector
#那么substring()的输出会比text长。

切分/paste的反向操作

使用strsplit()可以进行paste()的反向操作。需要注意的是,函数的输出是一个list!,即使x的长度为1!

strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)
#如果fixed=TRUE,则要求严格匹配split。否则split为正则表达式
> x='Thank you, voice of reason.'
> strsplit(x,',? ')
[[1]]
[1] "Thank"   "you"     "voice"   "of"      "reason."

文件路径

在R中最好使用 / 来描述文件路径。basename() 和 dirname()可以查看文件路径的不同部分。

> x <- 'E:/Steam/steamapps/common/Fallout New Vegas/nvse_loader.exe'
> basename(x) ; dirname(x)
[1] "nvse_loader.exe"
[1] "E:/Steam/steamapps/common/Fallout New Vegas"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容