作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 SPSS 建模器 v18.2.1 和 R v3.5.1(或 v3.3.3)使用
Essentials for R 18.2.1 .
我正在尝试制作“扩展转换(R 语法)”节点来处理 SPSS 难以处理的一些问题( future :使它们成为扩展包)。我希望他们添加多个列,创建新数据等并给出下一个节点 data.frame
.但是data.frame
被 SPSS 节点错误识别(即,下一个表节点的输出与 print(modelerData)
的控制台输出不同)。
怎么做 ? (或者这是一个错误?)
任何帮助将不胜感激。下面是一个可重现的简单示例;
[准备R env和数据(请用纯R做)]
# if not installed
install.packages(randomForest)
set.seed(1) # to reproduce
write.csv(iris[sort(sample(1:150, 100)), ], "iris_train_seed1.csv", row.names = FALSE)
### library ###
library(randomForest)
# make_model
set.seed(1)
modelerModel <- randomForest(formula = Species ~ . ,
data = modelerData,
ntree = 100)
#### predict
pred_forest <- data.frame(pred = predict(modelerModel,
newdata = modelerData))
prob_forest <- as.data.frame(predict(modelerModel,
newdata = modelerData,
type = "prob"))
# overwriting modelerData
modelerData <- cbind(modelerData, pred_forest, prob_forest)
# function definition to make modelerDataModel
getMetaData <- function (data) {
if (dim(data)[1]<=0) {
print("Warning : modelerData has no line, all fieldStorage fields set to strings")
getStorage <- function(x){return("string")}
} else {
getStorage <- function(x) {
res <- NULL
#if x is a factor, typeof will return an integer so we treat the case on the side
if(is.factor(x)) {
res <- "string"
} else {
res <- switch(typeof(unlist(x)),
integer = "integer",
# integer = "real",
double = "real",
character = "string",
"string")
}
return (res)
}
}
col = vector("list", dim(data)[2])
for (i in 1:dim(data)[2]) {
col[[i]] <- c(fieldName=names(data[i]),
fieldLabel="",
fieldStorage=getStorage(data[[i]]),
fieldMeasure="",
fieldFormat="",
fieldRole="")
}
mdm<-do.call(cbind,col)
mdm<-data.frame(mdm)
return(mdm)
}
# overwriting modelerDataModel
modelerDataModel <- getMetaData(modelerData)
# to check
print(dim(modelerData))
print(head(modelerData))
print(dim(modelerDataModel))
print(modelerDataModel)
print(modelerData)
是我想要的表节点输出)]
# print(dim(modelerData))
[1] 100 9
# print(head(modelerData))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species pred setosa
1 4.9 3.0 1.4 0.2 setosa setosa 1
2 4.7 3.2 1.3 0.2 setosa setosa 1
3 5.0 3.6 1.4 0.2 setosa setosa 1
4 5.4 3.9 1.7 0.4 setosa setosa 1
5 4.6 3.4 1.4 0.3 setosa setosa 1
6 5.0 3.4 1.5 0.2 setosa setosa 1
versicolor virginica
1 0 0
2 0 0
3 0 0
4 0 0
5 0 0
6 0 0
# print(dim(modelerDataModel))
[1] 6 9
# print(modelerDataModel)
X1 X2 X3 X4 X5 X6
fieldName Sepal.Length Sepal.Width Petal.Length Petal.Width Species pred
fieldLabel
fieldStorage real real real real string string
fieldMeasure
fieldFormat
fieldRole
X7 X8 X9
fieldName setosa versicolor virginica
fieldLabel
fieldStorage real real real
fieldMeasure
fieldFormat
fieldRole
最佳答案
这可能是因为您的 Species
和 pred
列的类型为 factor
不是 character
并查看 SPSS 节点文档,它们没有 factor
的类型.. 自 factor
有两个级别.. 输出表节点上的额外 2 列可能表示这两个列的因子级别,因为它试图强制转换为字符串。您需要它们作为 predict
的因子类型函数在脚本的开头,但在导出表节点之前尝试:
modelerData[] <- lapply(modelerData, function(x) if (is.factor(x)) as.character(x) else {x})
我没有 SPSS 能够测试这个理论,但希望这能解决你的问题或让你更接近一点。
关于r - 如何在 "modelerData"节点中正确制作 "modelerDataModel"和 "Extension Transform (R syntax)"添加多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62295301/
我使用 SPSS 建模器 v18.2.1 和 R v3.5.1(或 v3.3.3)使用 Essentials for R 18.2.1 . 我正在尝试制作“扩展转换(R 语法)”节点来处理 SPSS
我是一名优秀的程序员,十分优秀!