我对R不太熟悉,但无论如何我正在为一个c库编写一个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
}
感谢。
答案 0 :(得分:9)
is.string
是xtable
包中的函数。在帮助页面的详细信息部分,它明确指出“这些函数是print.xtable使用的私有函数。它们不打算在别处使用。”
因此,我会避免使用这些功能。
在R
中,没有string
数据类型。相反,它被称为character
,您可以使用is.character
来执行您所描述的检查。
另外,正如我在评论中提到的,避免使用重要的基本函数作为变量名。具体来说,str
用于查看对象的结构。
答案 1 :(得分:3)
在R中,字符串和字符之间没有根本区别。 “string”只是一个包含一个或多个字符的字符变量。
字符向量是一组存储为单个对象的字符串。大多数处理字符输入的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