Избавьтесь от лишних сепов в функции вставки в R - PullRequest
2 голосов
/ 21 июня 2019

Я пытаюсь избавиться от лишних sep в функции paste в R. Это выглядит просто, но я не могу найти нехакерский способ исправить это.Предположим, l1-l3 являются списками

l1 = list(a=1)
l2 = list(b=2)
l3 = list(c=3)
l4 = list(l1,l2=l2,l3=l3)

. Обратите внимание, что первый элемент l4 не назван.Теперь я хочу добавить константу к именам, как показано ниже:

names(l4 ) = paste('Name',names(l4),sep = '.')

Вот вывод:

 names(l4)
[1] "Name."   "Name.l2" "Name.l3"

Как мне избавиться от . в первом выводе(Name.)

1 Ответ

3 голосов
/ 21 июня 2019

Мы можем использовать trimws (из R 3.6.0 - можно указать whitespace с пользовательским символом)

trimws(paste('Name',names(l4),sep = '.'), whitespace = "\\.")
#[1] "Name"    "Name.l2" "Name.l3"

Или с sub, чтобы соответствовать . (. является метасимволом для любого символа, поэтому мы экранируем \\, чтобы получить буквальное значение) в конце ($) строки и заменяем пробелом ("")

sub("\\.$", "", paste('Name',names(l4),sep = '.'))

Если . уже есть в names в конце, мы можем использовать опцию индекса

ifelse(nzchar(names(l4)), paste("Name", names(l4), sep="."), "Name")
#[1] "Name"     "Name.l2." "Name.l3" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...