Подтвердить что ты не робот

Разница между пастой() и paste0()

Будучи новичком в R, кто-то может объяснить разницу между paste() и paste0(), то, что я понял из какого-то сообщения, заключается в том, что

paste0("a", "b") === paste("a", "b", sep="")

Даже я пробовал что-то вроде этого

a <- c("a","b","c")
b <- c("y","w","q")
paste(a,b,sep = "_")
**output**
"a_y" "b_w" "c_q"

с помощью paste0()

a <- c("a","b","c")
b <- c("y","w","q")
paste0(a,b,sep = "_")
**output**
"ay_" "bw_" "cq_"

Это только то, что paste() использует разделитель между элементами и paste0() использует разделитель после элементов?

4b9b3361

Ответ 1

Как объясняется в этом блоге Тайлером Ринкером:

paste имеет 3 аргумента.

paste (..., sep = " ", collapse = NULL) ... - это материал, который вы хотите вставить вместе, а sep и рухнуть, ребята, чтобы получить его сделанный. Есть три основных вещи, которые я вставляю вместе:

  • Букет отдельных строк символов.
  • 2 или более строк, вставленных в элемент для элемента.
  • Одна строка сжимается вместе.

Вот пример каждого, хотя и не с правильными аргументами

paste("A", 1, "%") # Букет отдельных строк символов.

paste(1:4, letters[1:4]) # 2 или более вставленный элемент для элемент.

paste(1:10) # Одна строка сжимается вместе. Здесь правило sep/collapse для каждого:

  • Буква отдельных строк символов - вы хотите, чтобы sep
  • 2 или более строк, вставленных в элемент для элемента. - Вы хотите, чтобы sep
  • Одна строка сжимается вместе. - Смушин требует краха.

paste0 сокращается для: paste(x, sep="") Таким образом, это позволяет нам быть более ленивыми и более эффективно.

paste0("a", "b") == paste("a", "b", sep="") ## [1] TRUE

Ответ 2

Позвольте мне выразить это простыми словами.. paste0 автоматически исключит пространство в вашей конкатенации.

Например, я хочу создать учебный и тестовый путь..здесь код..

> Curr_date=format(Sys.Date(),"%d-%b-%y")

> currentTrainPath = paste("Train_",Curr_date,".RData")

> currentTrainPath

[1] "Train_ 11-Jun-16 .RData"

> Curr_date=format(Sys.Date(),"%d-%b-%y")

> currentTrainPath = paste0("Train_",Curr_date,".RData")

> currentTrainPath

[1] "Train_11-Jun-16.RData"

Ответ 3

Простыми словами,

paste() похож на конкатенацию с использованием коэффициента разделения, тогда как

paste0() похож на функцию добавления, используя коэффициент разделения.

Добавив еще несколько ссылок на вышеприведенное обсуждение, ниже try outs могут быть полезны, чтобы избежать путаницы:

> paste("a","b")  #Here default separation factor is " " i.e. a space

[1] "a b"  

> paste0("a","b") #Here default separation factor is "" i.e a null

[1] "ab"

> paste("a","b",sep="-")

[1] "a-b"

> paste0("a","b",sep="-")

[1] "ab-"

> paste(1:4,"a")

[1] "1 a" "2 a" "3 a" "4 a"

> paste0(1:4,"a")

[1] "1a" "2a" "3a" "4a"

> paste(1:4,"a",sep="-")

[1] "1-a" "2-a" "3-a" "4-a"

> paste0(1:4,"a",sep="-")

[1] "1a-" "2a-" "3a-" "4a-"