![](/img/trans.png)
[英]R: igraph, graph.data.frame error “Some vertex names in edge list are not listed in vertex data frame”
[英]igraph graph.data.frame silently converts factors to character vectors
今天,我了解到igraph在graph.data.frame中默默丟失了因子,因此頂點數據幀中的因子被轉換為字符向量。 有沒有辦法保留因子類型,例如對於V(g)$factor_var
和df <- get.data.frame(g, what="vertices"); df$factor_var
df <- get.data.frame(g, what="vertices"); df$factor_var
? 在以下代碼中, gender
是factor_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.