如何将“*”运算符扩展到R中的字符串向量,其工作方式类似于Python

wlwcrazw  于 2023-05-20  发布在  Python
关注(0)|答案(2)|浏览(96)

在python中,'*'操作符可以在字符串列表中工作,如下所示:

#Python code
>>> a=['a','b','c']
>>> a*2
['a', 'b', 'c', 'a', 'b', 'c']

但在R中,它不起作用。

#R code 
> a=c('a','b','c')
> a*2
Error in a * 2 : non-numeric argument to binary operator

虽然答案是:按如下方式使用rep函数

> rep(a,times=2)
[1] "a" "b" "c" "a" "b" "c"

但我想学习如何扩展像''这样的运算符。我想学习如何扩展''运算符?

bvjxkvbb

bvjxkvbb1#

我并不是真的建议你这么做,但是既然你问了,你可以把*重新定义为泛型,然后添加你定制的方法。
在这种情况下,当第一个对象是字符时,您将使用rep,否则您将像往常一样进行正常的基数R乘法。

a <- c('a', 'b', 'c')

`*` <- function(e1, e2) UseMethod("*")
`*.character` <- function(e1, e2) rep(e1, e2)
`*.default`   <- function(e1, e2) base::`*`(e1, e2)

2*2
#> [1] 4
a*2
#> [1] "a" "b" "c" "a" "b" "c"

请注意,使用此代码可以执行a*2,但不能执行2*a

ozxc1zmp

ozxc1zmp2#

您可以在R中定义自己的操作符,例如。

`*` <- function(x, y) rep(x, times = 2)
a <- c('a', 'b', 'c')
a*2
[1] "a" "b" "c" "a" "b" "c"

然而,请注意,这并不是一个好主意,因为*是为乘法目的而预定义的,即。22*2不是44,而是22 22

相关问题