簡體   English   中英

R:如何編寫一個獲取data.table中列級別的函數

[英]R: How to write a function that gets the levels of column in a data.table

一些數據:

require(data.table)
set.seed(123)
DT <- data.table(factor = c("a", "b", "c"), num = rpois(6, 30))
DT[["factor"]] <- factor(DT[["factor"]])
levels(DT[["factor"]])
# [1] "a" "b" "c"

我正在嘗試編寫一個獲取DT級別的函數。 這是我到目前為止所做的嘗試:

get_levels <- function(data, factor){
  data = substitute(data)
  factor = substitute(factor)
  factor_levels = levels(data[["factor"]])
  print(factor_levels)
}

get_levels(DT, factor)

get_levels2 <- function(data, factor){
  data = substitute(data)
  factor = substitute(factor)
  factor_levels = levels(data[[factor]])
  print(factor_levels)
}

get_levels2(DT, factor)


get_levels3 <- function(data, factor){
  data = substitute(data)
  factor = substitute(factor)
  factor_levels = levels(eval(data[[deparse(factor)]]))
  print(factor_levels)
}

get_levels3(DT, factor)

我收到這個錯誤:

Error in data[["factor"]] : object of type 'symbol' is not subsettable

還有這個:

Error in data[[deparse(factor)]] : 
  object of type 'symbol' is not subsettable

由於我沒有太多的編程經驗,我不知道用於在函數中傳遞變量的函數的確切用途是什么: substitutedeparseevalparse 我一直在閱讀文檔,我發現它並不是很清楚。 因此,如果有人可以為每個功能提供更清晰的用途,或者可能指向資源以了解更多信息,那將會很有趣。

如果您對R(或一般編程)沒有經驗,請避免使用substitutedeparseeval等。它們很少是必需的。

DT <- data.table(f = c("a", "b", "c"), num = rpois(6, 30))
DT[["f"]] <- factor(DT[["f"]])

get_levels <- function(data,fac){
  levels(data[[fac]])
}

get_levels(DT,'f')

並且不要調用您的列factor 這是一個功能,它只是令人困惑。

以下打印出數據集中每個因子列的級別編號:

sapply(sapply(DT[,sapply(DT, is.factor)], levels), length)

暫無
暫無

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

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