R 中的二元运算符 %&% 其中引号是可选的
Binary operator %&% in R where quotation marks are optional
这些是我的说明:
创建一个二元运算符 %&%,它将两个字符串连接成一个字符串,使用 space 作为分隔符。编写一个运算符函数,其中术语周围的引号是可选的。以下输出是引用 and/or 未引用的参数。
> Hello %&% World
[1] “Hello World”
> “Hello” %&% “World”
[1] “Hello World”
我构建了一个函数,在用引号引起来时连接两个字符串,
"%&%" = function(x,y) {
if(is.character(x) || is.character(y))
return(paste(x , y, sep=" "))
}
但如果您输入 > Hello %&% World,该功能将不起作用。我怎样才能让它接受这个论点?
你也许可以这样做
"%&%" = function(x,y) {
x = substitute(x)
y = substitute(y)
if (!is.character(x)) x <- deparse(x)
if (!is.character(y)) y <- deparse(y)
if(is.character(x) || is.character(y))
return(paste(x , y, sep=" "))
}
适用于
Hello %&% World
# [1] "Hello World"
"Hello" %&% World
[1] "Hello World"
但这是一个非常脆弱的解决方案。请注意,传递给此函数的参数必须是正确的符号名称,否则 R 解析器无法处理命令。
这很简单,似乎可以解决问题。
"%&%" = function(x,y) {
paste( as.character(substitute(x)) ,as.character(substitute(y)) )
}
Hello %&% World
#[1] "Hello World"
'Hello' %&% 'World'
#[1] "Hello World"
as.character
将 return 来自表达式或字符值的字符值。与 MrFlick 给出的警告相同,对于解析器将解释为复合的任何参数,这将不会成功。
Hello %&% World View
Error: unexpected symbol in "Hello %&% World View"
如果您想赋予它基本的矢量功能,您需要评估参数。下面是第二个参数的定义:
"%&%" = function(x,y) {
paste( as.character(substitute(x)) , if( length(substitute(y)) == 1) {
as.character(substitute(y))} else{
eval(substitute(y))} )
}
Hello %&% c(123,234)
[1] "Hello 123" "Hello 234"
第一个版本 returned [1] "Hello c(123, 234)"
这些是我的说明:
创建一个二元运算符 %&%,它将两个字符串连接成一个字符串,使用 space 作为分隔符。编写一个运算符函数,其中术语周围的引号是可选的。以下输出是引用 and/or 未引用的参数。
> Hello %&% World
[1] “Hello World”
> “Hello” %&% “World”
[1] “Hello World”
我构建了一个函数,在用引号引起来时连接两个字符串,
"%&%" = function(x,y) {
if(is.character(x) || is.character(y))
return(paste(x , y, sep=" "))
}
但如果您输入 > Hello %&% World,该功能将不起作用。我怎样才能让它接受这个论点?
你也许可以这样做
"%&%" = function(x,y) {
x = substitute(x)
y = substitute(y)
if (!is.character(x)) x <- deparse(x)
if (!is.character(y)) y <- deparse(y)
if(is.character(x) || is.character(y))
return(paste(x , y, sep=" "))
}
适用于
Hello %&% World
# [1] "Hello World"
"Hello" %&% World
[1] "Hello World"
但这是一个非常脆弱的解决方案。请注意,传递给此函数的参数必须是正确的符号名称,否则 R 解析器无法处理命令。
这很简单,似乎可以解决问题。
"%&%" = function(x,y) {
paste( as.character(substitute(x)) ,as.character(substitute(y)) )
}
Hello %&% World
#[1] "Hello World"
'Hello' %&% 'World'
#[1] "Hello World"
as.character
将 return 来自表达式或字符值的字符值。与 MrFlick 给出的警告相同,对于解析器将解释为复合的任何参数,这将不会成功。
Hello %&% World View
Error: unexpected symbol in "Hello %&% World View"
如果您想赋予它基本的矢量功能,您需要评估参数。下面是第二个参数的定义:
"%&%" = function(x,y) {
paste( as.character(substitute(x)) , if( length(substitute(y)) == 1) {
as.character(substitute(y))} else{
eval(substitute(y))} )
}
Hello %&% c(123,234)
[1] "Hello 123" "Hello 234"
第一个版本 returned [1] "Hello c(123, 234)"