2013-08-29 70 views
2

我對R不太熟悉,但無論如何我正在爲C庫編寫一個R包裝器。我遇到了這個問題。我如何確定輸入參數是否是字符串?詳細地說,我應該寫這樣的:R中的字符串和字符有什麼區別?

dyn.load("hello.so") 
do_process <- function(str) { 
     if(!is.character(str)) 
      stop("not a character or string"); 
    result <- .Call("hello", as.character(str)) 
    return result 
} 

或本:

dyn.load("hello.so") 
do_process <- function(str) { 
     if(!is.string(str)) 
      stop("not a character or string"); 
    result <- .Call("hello", as.string(str)) 
    return result 
} 

感謝。

+2

在鹼'R'沒有功能'is.string'也不存在數據類型'string'。他們是'as'character'和'character'。另外,避免使用重要的基本函數作爲變量名稱。具體來說'str'用於查看對象的結構。 – Justin

+0

@Justin我不知道,但我已閱讀'is.string'的用法:http://rss.acs.unt.edu/Rdoc/library/xtable/html/string.html,並感謝您的建議'str'用法。 – lulyon

+0

@Justin我的錯。謝謝你指出這個錯誤。 – lulyon

回答

7

is.string是來自xtable包的功能。在幫助頁面的詳細信息部分中,它明確指出「這些函數是print.xtable使用的私有函數,它們不打算在其他地方使用。」

因此,我會避免使用這些功能。

R沒有string數據類型。相反,它被稱爲character,您可以使用is.character來執行您描述的檢查。

此外,正如我在我的評論中提到的,避免使用重要的基函數作爲變量名稱。具體而言,str用於查看對象的結構。

+0

我認爲這解釋了一切。再次,謝謝。 – lulyon

2

在R中,字符串和字符之間沒有根本的區別。 「字符串」只是一個包含一個或多個字符的字符變量。

有一件事你應該知道的,但是,是一個字符變量之間的區別,以及矢量。字符向量是一組存儲爲單個對象的字符串。對字符輸入起作用的大多數R函數都是矢量化的,即它們將爲這樣一個矢量中的每個元素返回適當的值。

例如:

# a string containing one character 
x <- "a" 
nchar(x) 
# 1 

# a string containing multiple characters 
x <- "foo" 
nchar(x) 
# 3 

# a character vector: two strings, each containing three characters 
x <- c("foo", "bar") 

# length() returns the no. of elements in a vector, NOT the length of each string 
length(x) 
# 2 

# nchar() returns the length of each string in a vector 
nchar(x) 
# 3 3 
+0

糟糕,我想我現在需要檢查我的綁定代碼! R_allocVector函數是返回一個標量字符變量還是一個向量? – lulyon

相關問題