Количество символов в строке, имеющей числовой шаблон (в R)? - PullRequest
0 голосов
/ 27 мая 2019

Я ищу функцию (скажем, ncharexact), которая будет возвращать количество символов в строке, имеющей числовой шаблон. Обратите внимание:

nchar(5.00) # 1
nchar("5.00") # 4; this is what I desire: ncharexact(5.00)=4

nchar(5.00120) # 6 (the last 0 is not taken into account) 
nchar("5.00120") # 7; this is what I desire: ncharexact(5.00120)=7
nchar(5.0012000) # 6 (the last 000 is not taken into account) 
nchar("5.0012000") # 9; this is what I desire: ncharexact(5.0012000)=9

Когда я пытаюсь написать код функции ncharexact (хотя на первый взгляд это кажется легким), я не смог добиться успеха, несмотря ни на что.

С чем я столкнулся:
Конкатенация строк, добавление одинарных кавычек и добавление двойных кавычек в строку показались мне подходящими инструментами. Я нашел их:

Добавление одинарной кавычки в строку
преобразовать abc в 'abc':
(1)

paste("'", "abc", "'", sep="")  # "'abc'"

(2)

paste0("'", "abc", "'") # "'abc'"
* * 1 022 (3)
sQuote("abc") # "‘abc’" (shape of single quote different!)
options("useFancyQuotes") # Default=TRUE
options(useFancyQuotes = FALSE) 
sQuote("abc") # "'abc'" (shape of single quote upright ASCII!)
options(useFancyQuotes = TRUE) # Return to default value
* +1025 * (4)
Reduce(paste0,list("'","abc","'")) # "'abc'"
* 1 028 * (5) * * тысяча двадцать девять
mapply(paste0, "'", c("abc", "def"), "'")
#       '    <NA> 
#   "'abc'" "'def'"

Кроме того,

library(stringr)
mystring <- "123 AB 246 CD"
v <- str_extract_all(mystring, '[0-9]{3} [A-Z]{2}')[[1]];v   # "123 AB" "246 CD"
r <- paste0(v, collapse='","', sep="");r                  # "123 AB\",\"246 CD"
singlequote <- paste0("'",paste0(v, sep="", collapse="','"),"'"); singlequote # "'123 AB','246 CD'"

Добавление двойной кавычки в строку

shQuote("abc") # "\"abc\""  Appearance is bad, but it works

Сказанное выше, по-видимому, не преобразует строку abc в строку "abc", но это действительно так: обратные косые черты не являются частью строки. Каждый персонаж может быть замечен:

strsplit(shQuote("abc"), "") # "\"" "a"  "b"  "c"  "\""
nchar(shQuote("abc")) # 5; there are only 5 characters

Если кто-то хочет, чтобы строка (была показана) без обратной косой черты:

cat(shQuote("abc"), "\n") # "abc"
nchar(cat(shQuote("abc"), "\n")) # "abc" integer(0); Appearance is good, but it does not work

Если мы хотим, чтобы двойные кавычки были частью строки, мы ставим «\» перед ней для экранирования двойных кавычек:

"a \"b\" c" # "a \"b\" c"
nchar("a \"b\" c") # 7
...