簡體   English   中英

igraph graph.data.frame默默地將因子轉換為字符向量

[英]igraph graph.data.frame silently converts factors to character vectors

今天,我了解到igraph在graph.data.frame中默默丟失了因子,因此頂點數據幀中的因子被轉換為字符向量。 有沒有辦法保留因子類型,例如對於V(g)$factor_vardf <- get.data.frame(g, what="vertices"); df$factor_var df <- get.data.frame(g, what="vertices"); df$factor_var 在以下代碼中, genderfactor_var

actors <- data.frame(name=c("Alice", "Bob", "Cecil", "David", "Esmeralda"),
                     age=c(48,33,45,34,21),
                     gender=factor(c("F","M","F","M","F")))
relations <- data.frame(from=c("Bob", "Cecil", "Cecil", "David",
                               "David", "Esmeralda"),
                        to=c("Alice", "Bob", "Alice", "Alice", "Bob", "Alice"),
                        same.dept=c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE),
                        friendship=c(4,5,5,2,1,1), advice=c(4,5,5,4,2,3))
g <- graph.data.frame(relations, directed=TRUE, vertices=actors)
g_actors <- get.data.frame(g, what="vertices")

# Compare type of gender (before and after)
is.factor(actors$gender)
is.factor(g_actors$gender)

在此可重現的示例中,actors $ gender是一個因素,而g_actors $ gender不是。 我認為應該如此。 在文檔中,我沒有對此問題發表任何評論。

這很重要,因為通過get.data.frame導出頂點get.data.frame進行線性回歸會get.data.frame因子(線性回歸會將因子轉換為虛擬變量,但會忽略字符向量)。 我注意到了,因為我的因子變量在輸出中消失了。

當然,在從igraph導出后,我可以重新創建因子,但這很繁瑣,因為我有很多圖並且級別排序都是錯誤的(而且我不認為這是必要的,除非igraph無法在其整個過程中支持這種行為C ++和python版本)。

瑞安

是的, graph.data.frame

newval <- d[, i]
if (class(newval) == "factor") {
  newval <- as.character(newval)
}
attrs[[names(d)[i]]] <- newval

因此它將因子轉換為字符。 我不確定為什么,但是它一直存在着: https : //github.com/igraph/igraph/blame/c5849a89739c0dd058ff0a770aff2443745636fa/interfaces/R/igraph/R/structure.generators.R#L602

解決方法是,可以使用其他名稱創建該函數的副本,然后刪除這三行。

如果您認為這是一個錯誤,那么也請在https://github.com/igraph/igraph/issues上打開一個問題,我將添加一個不太轉換的選項。 我認為默認值仍然會是轉換,因為它已經存在很長時間了,人們可能會依賴它。

暫無
暫無

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

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