簡體   English   中英

使用R中的函數參數定義全局變量

[英]Define global variable using function argument in R

我正在嘗試在R中編寫一個函數,它從數據幀中刪除列並返回具有指定為函數參數的名稱的新數據:

drop <- function(my.data,col,new.data) {
new.data <<- my.data[,-col] 
return(new.data)
}

所以在上面的例子中,我希望在調用函數之后存在一個新的數據框,它被命名為用戶輸入的任何內容作為第三個參數。

當我調用函數時,返回正確的數據框,但是如果我然后嘗試在全局環境中使用新數據框,則會object not found 我想通過使用<<-運算符我在全局定義new.data

有人可以幫我理解發生了什么,是否有辦法實現這一目標?

我發現這個似乎有關,但我沒有完全回答我的問題。

使用assign()函數。

  assign("new.data", my.data[,-col], envir = .GlobalEnv) 

第一個參數應該是一個字符串。 在這種情況下,結果全局變量將命名為“new.data”。 如果new.data是名稱本身,則從函數調用中刪除引號。

<<-並不總是分配給全球環境。

但是,一般來說,最好從函數返回東西,而不是從函數內部設置全局變量。 后者更難調試。

需要這個的一個原因是在使用RStudio控制台進行大量文本挖掘時。 例如,如果您有一個大型語料庫,並且您希望根據主題將其分解為sub-corpi,則將處理作為函數執行並返回已清理的語料庫可以更快。 一個例子如下:

 processText <- function(inputText, corpName){
  outputName <- Corpus(VectorSource(inputText))
  outputName <- tm_map(outputName,PlainTextDocument)
  outputName <- tm_map(outputName, removeWords, stopwords("english"))
  outputName <- tm_map(outputName, removePunctuation)
  outputName <- tm_map(outputName, removeNumbers)
  outputName <- tm_map(outputName, stripWhitespace)
  assign(corpName, outputName, envir = .GlobalEnv)
  return(corpName)
}

在上面的例子中,我從數據框輸入列作為inputText ,輸入所需的輸出語料庫作為corpName 這允許以下簡單任務處理一堆文本數據:

processText(retail$Essay,"retailCorp")

然后,新的語料庫“retailCorp”出現在全球環境中,用於進一步的工作,如繪制文字雲等。此外,我可以通過該功能發送列表並獲得大量的corpi。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM