vij*_*jay 10 r data.table
从我在这里看到的,我会假设data.table v1.8.0 +不会自动将字符串转换为因子.
具体来说,从该页面引用Matthew Dowle:
不需要stringsAsFactors.在v1.8.0中完成了这样的操作:o现在允许在键中使用字符列,并且优先考虑因素.data.table()和setkey()不再强迫字符到因子.仍然支持因素.
我没有看到......这是我的R会议记录:
首先,我确保我有一个最新版本的data.table> 1.8.0
> library(data.table)
data.table 1.8.8 For help type: help("data.table")
Run Code Online (Sandbox Code Playgroud)
接下来,我创建一个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>
Run Code Online (Sandbox Code Playgroud)
当我在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>
Run Code Online (Sandbox Code Playgroud)
我错过了什么?data.frame()是否应该将字符串转换为因子,如果是这样,是否有"更好的方法"将这种行为关闭?
谢谢!
mne*_*nel 11
直到现在,这个问题似乎已经过去了.感谢@fpinter 最近提交了该问题.它现在在提交1322中修复.来自NEWS,No:39针对v1.9.3的错误修复:
as.data.table.matrix默认情况下不会将字符串转换为因子.data.table喜欢并喜欢使用字符向量来表示因素.关闭#745.感谢@fpinter报告了github问题跟踪器上的问题,并感谢vijay报告此处的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)
}
Run Code Online (Sandbox Code Playgroud)
和
as.data.table.matrix
包含
if (mode(x) == "character") {
for (i in ic) value[[i]] <- as.factor(x[, i])
}
Run Code Online (Sandbox Code Playgroud)
可能值得向bug跟踪器报告此信息.(它仍然在1.8.9中实现,目前的r-forge版本)
作为解决方法并完成@mnel答案,如果要关闭data.frame的默认行为,可以使用专用选项.
options(stringsAsFactors=FALSE)
str(data.table(data.frame(m)))
Classes ‘data.table’ and 'data.frame': 2 obs. of 2 variables:
$ X1: chr "a" "b"
$ X2: chr "c" "d"
- attr(*, ".internal.selfref")=<externalptr>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6262 次 |
| 最近记录: |