第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在R中制作字符串連接運算符

在R中制作字符串連接運算符

寶慕林4294392 2019-10-30 10:45:18
我想知道如何在R中編寫字符串連接運算符,例如||。在SAS,+在Java / C?;颍υ赩isual Basic中。最簡單的方法是使用%創(chuàng)建特殊運算符,例如`%+%` <- function(a, b) paste(a, b, sep="")但這會導致%代碼中很多難看的東西。我注意到,這+是在Ops組中定義的,您可以為該組編寫S4方法,所以也許可以采用類似的方法。但是,我完全沒有使用S4語言功能的經(jīng)驗。我如何修改上述功能以使用S4?
查看完整描述

3 回答

?
瀟瀟雨雨

TA貢獻1833條經(jīng)驗 獲得超4個贊

正如其他人提到的那樣,您不能覆蓋密封的S4方法“ +”。但是,您無需定義新的類即可為字符串定義加法函數(shù)。這不是理想的選擇,因為它會迫使您轉(zhuǎn)換字符串的類,從而導致代碼更丑陋。而是可以簡單地覆蓋“ +”函數(shù):


"+" = function(x,y) {

    if(is.character(x) || is.character(y)) {

        return(paste(x , y, sep=""))

    } else {

        .Primitive("+")(x,y)

    }

}

然后,以下所有內(nèi)容均應按預期工作:


1 + 4

1:10 + 4 

"Help" + "Me"

該解決方案有點像hack,因為您不再使用形式化方法,而是獲得所需確切行為的唯一方法。


查看完整回答
反對 回復 2019-10-30
?
撒科打諢

TA貢獻1934條經(jīng)驗 獲得超2個贊

我會嘗試的(相對更干凈的S3解決方案)


`+` <- function (e1, e2) UseMethod("+")

`+.default` <- function (e1, e2) .Primitive("+")(e1, e2)

`+.character` <- function(e1, e2) 

    if(length(e1) == length(e2)) {

           paste(e1, e2, sep = '')

    } else stop('String Vectors of Different Lengths')

上面的代碼將更改為+通用代碼,并將設置+.default為原始代碼+,然后將新方法添加+.character到+


查看完整回答
反對 回復 2019-10-30
?
郎朗坤

TA貢獻1921條經(jīng)驗 獲得超9個贊

您也可以為此使用S3類:


String <- function(x) {

  class(x) <- c("String", class(x))

  x

}


"+.String" <- function(x,...) {

  x <- paste(x, paste(..., sep="", collapse=""), sep="", collapse="")

  String(x)

}



print.String <- function(x, ...) cat(x)


x <- "The quick brown "

y <- "fox jumped over "

z <- "the lazy dog"


String(x) + y + z


查看完整回答
反對 回復 2019-10-30
  • 3 回答
  • 0 關(guān)注
  • 557 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號