如何编写中缀函数?
How do I write an infix function?
我正在尝试编写一个名为 %#% 的中缀函数,它将对两个向量 x 和 y 进行操作。操作 x%#%y 应该 return 一个与 x 和 y 长度相同的向量。
如果 x[i]>0 且 y[i]>0,则 returned 向量的元素 i 应为 x[i]+y[i],如果 x[i]>0 且 y[i],则为 0 <0 或如果 x[i]<0 且 y[i]>0,以及 -x[i]-y[i] 如果 x[i]<0 且 y[i]<0。如果向量具有不同的长度,则应 returned 错误。
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 中保留用于注释
- 使用矢量化方法
- 想想如果
x
或 y
为零会发生什么
您可以尝试以下方法:
`%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
我正在尝试编写一个名为 %#% 的中缀函数,它将对两个向量 x 和 y 进行操作。操作 x%#%y 应该 return 一个与 x 和 y 长度相同的向量。 如果 x[i]>0 且 y[i]>0,则 returned 向量的元素 i 应为 x[i]+y[i],如果 x[i]>0 且 y[i],则为 0 <0 或如果 x[i]<0 且 y[i]>0,以及 -x[i]-y[i] 如果 x[i]<0 且 y[i]<0。如果向量具有不同的长度,则应 returned 错误。
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 中保留用于注释
- 使用矢量化方法
- 想想如果
x
或y
为零会发生什么
您可以尝试以下方法:
`%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