2016-10-14 88 views
3

在Excel(和Excel VBA)這是真正有用的連接使用 「&」 的文字和變量:R中的VBAs「&」等價於什麼?

a = 5 
msgbox "The value is: " & a 

會給

"The value is: 5" 

如何在R中可以做到這一點?我知道有一種方法可以使用「paste」。不過,我想知道是否沒有任何技巧能像Excel VBA那樣簡單。

在此先感謝。

+3

'paste'是非常簡單的,以及'sprintf的( 「值是:%d」,一)' –

+0

遺憾,沒有看到張貼的答案之前,您的評論... –

回答

5

This blog post暗示來定義自己的連接符,這是類似於VBA(和JavaScript)的,但它保留的paste功率:

"%+%" <- function(...) paste0(..., sep = "") 

"Concatenate hits " %+% "and this." 
# [1] "Concatenate hits and this." 

我不是這個解決方案的大風扇,雖然因爲它隱藏了什麼paste在引擎蓋下。例如,你覺得這會發生嗎?

"Concatenate this string " %+% "with this vector: " %+% 1:3 
# [1] "Concatenate this string with this vector: 1" 
# [2] "Concatenate this string with this vector: 2" 
# [3] "Concatenate this string with this vector: 3" 

在Javascript中的情況下,這將給你Concatenate this string with this vector: 1,2,3,這是完全不同的。我不能說Excel,但你應該考慮這個解決方案對你來說不是更困難,而不是更有用。

如果你需要使用Javascript樣的解決方案,你也可以試試這個:

"%+%" <- function(...) { 
    dots = list(...) 
    dots = rapply(dots, paste, collapse = ",") 
    paste(dots, collapse = "") 
} 

"Concatenate this string " %+% "with this string." 
# [1] "Concatenate this string with this string." 

"Concatenate this string " %+% "with this vector: " %+% 1:3 
# [1] "Concatenate this string with this vector: 1,2,3" 

但我還沒有廣泛的測試,所以要了望意想不到的效果。

1

另一種可能性是使用sprintf

a <- 5 
cat(sprintf("The value is %d\n",a)) 
## The value is 5 

%d表示整數格式化(%f會給 「的值是5.000000」)。 \n表示字符串末尾的換行符。

sprintf()可以比pastepaste0更方便,當你想要放置很多件時,

sprintf("The value of a is %f (95% CI: {%f,%f})", 
     a_est,a_lwr,a_upr) 
相關問題