8

我对 R 不是很熟悉,但无论如何我正在为 ac 库编写 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
}

谢谢。

4

2 回答 2

14

is.stringxtable包中的一个函数。在帮助页面的详细信息部分,它明确表示“这些函数是 print.xtable 使用的私有函数。它们不打算在其他地方使用。”

因此,我会避免使用这些功能。

R里面没有string数据类型。相反,它被调用character,您可以使用它is.character来进行您所描述的检查。

另外,正如我在评论中提到的,避免使用重要的基本函数作为变量名。具体str用于查看对象的结构。

于 2013-08-29T14:30:26.797 回答
8

在 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
于 2013-08-29T14:37:56.050 回答