r语言 - 如何编写中缀函数?



我正在尝试编写一个名为%#%的中缀函数,该函数将在两个向量x和y上运行。操作 x%#%y 应返回与 x 和 y 长度相同的向量。 返回向量的元素 i 如果 x[i]>0 和 y[i]>0,则为 x[i]+y[i],如果 x[i]>0 和 y[i]<0,或者如果 x[i]<0 和 y[i]>0,则为 0,如果 x[i]<0 和 y[i]<0,则为 -x[i]-y[i]。如果向量具有不同的长度,则应返回错误。

x <- rnorm(10)
y <- rnorm(10)
'%#%' <- function(x,y) { 
for (i in 1:10)
{
if (x[i]>0 & y[i]>0) paste(x[i]+y[i])
if (x[i]>0 & y[i]<0) paste(0)
if (x[i]<0 & y[i]>0) paste(0)
if (x[i]<0 & y[i]<0) paste(-x[i]-y[i]) 
else stop("Vectors have different lengths")
}}
x%#%y

它只是不断给我错误消息。

我建议:

  • 不使用#因为此符号是为 R 中的注释保留的
  • 使用矢量化方法
  • 想想如果xy为零会发生什么

您可以尝试如下内容:

`%ooo%` <- function(x,y) { 
if(length(x)!=length(y))
stop("Vectors have different lengths")
tmp <- ifelse(x>0 & y>0, x+y, -x-y)
tmp[(x>0 & y<0) | (x<0 & y>0)] <- 0
tmp
}
x <- rnorm(10)
y <- rnorm(10)
rep(1, 5) %ooo% rep(1, 6)
## Error in rep(1, 5) %ooo% rep(1, 6) : Vectors have different lengths
rep(1, 5) %ooo% -2:2
## [1]  0  0 -1  2  3

相关内容

  • 没有找到相关文章

最新更新