2013-08-29 73 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

相关问题