簡體   English   中英

R 中的 paste() 函數:當輸入是字符向量時會發生什么?

[英]paste() function in R: what happens when the input is a character vector?

我想了解paste如何處理輸入向量。

具體來說,我想知道為什么我在"che""fai"之間看到兩個空格

> paste(c("ciao", "che", "fai"))
[1] "ciao" "che"  "fai" 

您的問題與paste工作方式無關。 相反,它與print工作方式有關。

當您啟動命令paste(c("ciao", "che", "fai")) ,您在控制台中看到的實際上是print(paste(c("ciao", "che", "fai")))

在這種情況下, paste根本不會更改您的輸入,因此就像啟動以下命令: print(c("ciao", "che", "fai"))

字符向量的print默認行為使每個字符串具有相同的長度(相同的字符數),然后將它們寫入控制台。

在您的情況下,每個字符串必須與最長的字符串 ( "ciao" ) 一樣長,即 4 個字符加上兩倍" 。不那么長的字符串用空格填充。

在這里,我創建了一個函數來分解print對輸入的實際作用:

my_print <- function(x){ 

  # set up " " around strings
  x <- dQuote(x, q = FALSE)
  
  # make all the same length
  x <- format(x, width = max(nchar(x))) 
  
  # print with the same style of `print`
  cat(x, fill = TRUE, labels = paste0("[", seq_along(x), "]"))

}

您在控制台中看到的內容:

> my_print(c("ciao", "che", "fai"))
[1] "ciao" "che"  "fai" 

> print(c("ciao", "che", "fai"))
[1] "ciao" "che"  "fai" 

> c("ciao", "che", "fai")
[1] "ciao" "che"  "fai" 

> print(paste(c("ciao", "che", "fai")))
[1] "ciao" "che"  "fai" 

注意每個字符串的長度:

[1] "ciao" "che"  "fai" 
    ------+------+------
    123456+123456+123456

這與粘貼的工作方式無關,而是與如何將輸出打印到 R 中的控制台這一事實有關。嘗試print(c("ciao", "che", "fai")) 你應該得到相同的結果。 為了更好地理解行為,您可以嘗試print(c("a", "aaaa", "a", "a", "a"))

paste()函數連接向量的元素。 連接元素之間有空格的原因是參數collapse的標准值為" " 如果你想直接連接元素,你可以使用paste(c("ciao", "che", "fai"), collapse = "") -> "ciaochefai"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM