执行R进程中的子集
嗨,在Rapidminer中执行R时,数据帧的一些基本子集似乎不工作。
我在Rstudio中运行了这个R代码,它在子集后产生了正确的维度:
Cat('训练x的维度:',dim(as.data.frame(data [train, x])), '\n')
Cat('训练y的维度:',dim(as.data.frame(data [train, y])), '\n')
#训练x的维度:138 60
#训练y的维数:138
然后我把这个R代码粘贴到a中执行R
进程,得到:
2016年7月7日下午4:57:43信息:训练的维度x: 62 1
2016年7月7日下午4:57:43信息:培训维度y: 62 1
我打印了许多其他的东西来调试,其他的东西在两种情况下都是一样的(Rstudio vs Rapidminer)。——参见下面的完整输出
在这两种情况下都使用声纳数据(208行* 61列)。
--------
完整的R代码:
库(mlbench)
rm_main = function(data, in_rapidminer = T){
cat('正在启动R脚本…\n')
#查找x(属性)和y(响应)的列####
如果(in_rapidminer) {
meta = melt(元数据)
meta$L1 = NULL
Names (meta) = c('value', 'variable', 'column')
Meta = dcast(Meta,公式=列~变量)
打印(元)
Y_name = meta[meta$role %in% 'label', 'column']
X_name = meta[meta$role %in% 'attribute', 'column']
Y = names(dat) %in% y_name
X = names(dat) %in% x_name
} else {
#在R中手动指定:
y_name = 'Class'
Y = names(dat) %in% y_name
X = !Names (data) %in% c(y_name, 'pred_prob', 'pred')
}
Cat ('y column:', which(y), '\n')
Cat ('x column(s):', which(x), '\n')
Cat ('dimension of data:', dim(data), '\n')
# encode y(只适用于二进制)####
F1 = paste0('~', y_name, '- 1')
数据[[y_name]] = model.matrix(as.formula(f1),数据= data)[, 1]
# # # # #
N_row = nrow(数据)
N_fold = 3
set.seed (123)
Group = (seq_len(n_row) - 1) %% n_fold + 1
组=样本(组)#随机排列
打印(表(集团))
# n_fold CV ####
For (ii in seq_len(n_fold)){
cat('CV round', ii, '\n')
Train = group != ii
Cat ('dimension of data:', dim(data), '\n')
Cat('训练集中有多少行',sum(train), '\n')
Cat('训练x的维度:',dim(as.data.frame(data [train, x])), '\n')
Cat('训练y的维度:',dim(as.data.frame(data [train, y])), '\n')
}
返回(1)
}
数据(声纳)
声纳
rm_main(data, in_rapidminer = F)
完整的输出:
现在开始R脚本…
Y列:61
X列:12 34 56 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
数据维数:208
集团
1 2 3
70 69 69
简历第一轮
数据维数:208
训练集中有多少行:138
训练尺寸x: 138 60
训练y的维数:138
CV第2轮
数据维数:208
训练集中有多少行:139
训练x的尺寸:139 60
训练y的维数:139
简历第3轮
数据维数:208
训练集中有多少行:139
训练x的尺寸:139 60
训练y的维数:139
(我用红色标出)
完整的Rapidminer代码:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<过程version = " 6.4.000 " >
> <上下文
<输入>
<位置> / / _your_path_声纳> < /位置
输入> < /
<输出/ >
<宏/ >
> < /上下文
<过程扩展= " true " >
< /操作符>此R代码仅适用于二进制(两类)响应
> < /过程
< /操作符>
> < /过程
完成Rapidminer的登录:
七月7日,2016年5:15:25 PM信息:开始R脚本现在…
2016年7月7日5:15:25 PM INFO:列角色类型
2016年7月7日5:15:25 PM INFO: 1 attribute_1 attribute real
2016年7月7日5:15:25 PM INFO: 2 attribute_10 attribute real
2016年7月7日5:15:25 PM INFO: 3 attribute_11 attribute real
<为了清楚起见,我省略了一些行>
2016年7月7日5:15:25 PM INFO: 58 attribute_7 attribute real
2016年7月7日5:15:25 PM INFO: 59 attribute_8 attribute real
2016年7月7日5:15:25 PM INFO: 60 attribute_9 attribute real
2016年7月7日下午5:15:25信息:61类标签标称
2016年7月7日下午5:15:25信息:y栏:61
2016年7月7日下午5:15:25信息:x列(s): 12 34 56 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
2016年7月7日5:15:25 PM INFO:数据维度:20861
2016年7月7日下午5:15:25信息:组
2016年7月7日下午5:15:25信息:1 2 3
2016年7月7日下午5:15:25信息:70 69 69
2016年7月7日下午5:15:25信息:简历第一轮
2016年7月7日5:15:25 PM INFO:数据维度:20861
七月7日,2016年5:15:25 PM信息:多少行在训练集:138
2016年7月7日下午5:15:25信息:训练尺寸x: 61 1
2016年7月7日下午5:15:25信息:培训维度y: 61
2016年7月7日下午5:15:25信息:CV第2轮
2016年7月7日5:15:25 PM INFO:数据维度:20861
七月7日,2016年5:15:25 PM信息:多少行在训练集:139
2016年7月7日下午5:15:25信息:训练尺寸x: 61 1
2016年7月7日下午5:15:25信息:培训维度y: 61
2016年7月7日下午5:15:25信息:简历第3轮
2016年7月7日5:15:25 PM INFO:数据维度:20861
七月7日,2016年5:15:25 PM信息:多少行在训练集:139
2016年7月7日下午5:15:25信息:训练尺寸x: 61 1
2016年7月7日下午5:15:25信息:培训维度y: 61
july 7, 2016 5:15:25 PM INFO:保存结果。
2016年7月7日下午5:15:25信息:过程
任何帮助都很感激。谢谢- - -
标记:
0
最佳答案
-
awchisholm RapidMiner认证专家、会员职位:458独角兽
答案
<我删除了这个回复>
你好
R脚本中的元数据变量是什么?如果你执行str(metaData),你会得到什么?
问候
安德鲁
谢谢安德鲁。元数据是列表的列表的列表。
(如果您不熟悉元数据,它是关于角色(标签/id/属性/…)和每个列的数据类型的信息。例如,你可以在Rapidminer中使用“set role”操作符来控制角色,你也可以在导入数据向导中控制角色。
' execute R '操作符的官方文档讨论了如何处理元数据<http://docs.www.turtlecreekpls.com/studio/operators/utility/scripting/execute_r.html>
如果你在Rapidminer中打开' execute R '的HELP,文档中有示例链接。
在扁平化和重组之后更容易看到:
你好
我知道角色是什么,但我不知道具体添加了一个R变量来描述它。
安德鲁
嗨,安德鲁,
你的解决方案解决了问题。我通过在Rstudio中执行data = data.table(dat)来重复这个错误。
非常感谢!
只是评论一下,让未来的用户知道
Rapidminer执行操作符使用数据。表对象vs .数据框架
所以在函数rm_main(data1,data2,data3)中,所有的data1,data2,data3对象都是数据表而不是数据框架。
因此,如果您更熟悉数据框架,最好的选择是将表转换为框架