Azure ML和R脚本

时间:2019-04-06 17:23:26

标签: r azure-machine-learning-studio

我的数据框带有列

date    open    high    low     close   adjclose    volume

我想再添加一列名为“结果”的列(如果关闭>打开则为1,如果关闭<打开则为0)

我愿意

# Map 1-based optional input ports to variables
data <- maml.mapInputPort(1) # class: data.frame



# calculate pass/fail
data$result <- as.factor(sapply(data$close,function(res) 
    if (res - data$open >= 0) '1' else '0'))

# Select data.frame to be sent to the output Dataset port
maml.mapOutputPort("data");

但是我只有1个结果。问题出在哪里?

1 个答案:

答案 0 :(得分:1)

if/else只能返回单个TRUE / FALSE,并且不会对长度大于1的向量进行矢量化处理。它可能适合使用ifelse(但这也不是必需的,与之相比效率较低将逻辑向量的强制转换为二进制(as.integer)在OP的代码中,“ close”列元素被循环(sapply)并从整个“ open”列中减去。进行元素减法。在这种情况下,列之间的-更干净,更有效(因为这些操作是矢量化的)

data$result <- with(data, factor(as.integer((close - open) >= 0)))

在上面,我们获得了列之间的差(“关闭”,“打开”),检查它是否大于或等于0(返回逻辑向量),将其转换为二进制数(as.integer -TRUE-> 1,FALSE-> 0),然后将其更改为factor类型(如果需要)