Я ищу функцию (скажем, 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