Azure ML和r脚本

问题描述 投票:1回答:1

我有数据框的列

date    open    high    low     close   adjclose    volume

我想再添加一个名为“result”的列(如果close> open则为1,如果close <open则为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个。问题出在哪儿?

r azure-machine-learning-studio
1个回答
1
投票

if/else只返回一个TRUE / FALSE,并且长度> 1时不进行矢量化。可能适合使用ifelse(但这也不是必需的,并且与逻辑矢量到二进制的直接coersion(as.integer)相比效率较低在OP的代码中,'close'列元素循环(sapply)并从整个'open'列中减去。目的可能是进行元素减法。在这种情况下,列之间的-更清晰,更有效(因为这些操作是矢量化的)

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

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

© www.soinside.com 2019 - 2024. All rights reserved.