gpt4 book ai didi

r - data.table() 仍然将字符串转换为因子?

转载 作者:行者123 更新时间:2023-12-04 03:12:05 25 4
gpt4 key购买 nike

据我所知 here我认为 data.table v1.8.0+ 不会自动将字符串转换为因子。

具体来说,从该页面引用马修·道尔:

No need for stringsAsFactors. Done like this in v1.8.0 : o character columns are now allowed in keys and are preferred to factor. data.table() and setkey() no longer coerce character to factor. Factors are still supported.



我没有看到……这是我的 R session 记录:

首先,我确保我有一个足够新的 data.table > 1.8.0 版本
> library(data.table)
data.table 1.8.8 For help type: help("data.table")

接下来,我创建了一个 2x2 的 data.table。请注意,它会创建因子...
> m <- matrix(letters[1:4], ncol=2)
> str(data.table(m))
Classes ‘data.table’ and 'data.frame': 2 obs. of 2 variables:
$ V1: Factor w/ 2 levels "a","b": 1 2
$ V2: Factor w/ 2 levels "c","d": 1 2
- attr(*, ".internal.selfref")=<externalptr>

当我在 data.frame() 中使用 stringsAsFactors 然后调用 data.table() 时,一切都很好......
> str(data.table(data.frame(m, stringsAsFactors=FALSE)))
Classes ‘data.table’ and 'data.frame': 2 obs. of 2 variables:
$ X1: chr "a" "b"
$ X2: chr "c" "d"
- attr(*, ".internal.selfref")=<externalptr>

我错过了什么? data.frame() 是否应该将字符串转换为因子,如果是这样,是否有“更好的方法”关闭该行为?

谢谢!

最佳答案

更新:

直到现在,这个问题似乎已经以某种方式过去了。感谢@fpinter filing the issue最近。现在已在 commit 1322 中修复.来自 NEWS , No:39 在 v1.9.3 的错误修复下:

as.data.table.matrix does not convert strings to factors by default. data.table likes and prefers using character vectors to factors. Closes #745. Thanks to @fpinter for reporting the issue on the github issue tracker and to vijay for reporting here on SO.



这种非强制似乎尚未实现。
data.table处理 matrix使用 as.data.table 的参数
if (is.matrix(xi) || is.data.frame(xi)) {
xi = as.data.table(xi, keep.rownames = keep.rownames)
x[[i]] = xi
numcols[i] = length(xi)
}


as.data.table.matrix
包含
if (mode(x) == "character") {
for (i in ic) value[[i]] <- as.factor(x[, i])
}

可能值得将此报告给错误跟踪器。 (它仍然在 1.8.9,当前的 r-forge 版本中实现)

关于r - data.table() 仍然将字符串转换为因子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17691050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com