Azure ML 和 r 脚本
Azure ML and r scripts
我有包含列
的数据框
date open high low close adjclose volume
我想再添加一个名为 "result" 的列(1 if close > open, 0 if close < open)
我愿意
# 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 个结果。问题出在哪里?
if/else
只能 return 一个 TRUE/FALSE 并且不会对长度 > 1 进行向量化。使用 ifelse
可能是合适的(但这也是不需要,并且与将逻辑向量直接强制转换为二进制(as.integer
)相比效率较低。在 OP 的代码中,'close' 列元素被循环(sapply
)并从整个 'open' 列。目的可能是进行元素减法。在这种情况下,列之间的 -
更加清晰和高效(因为这些操作是矢量化的)
data$result <- with(data, factor(as.integer((close - open) >= 0)))
在上面我们得到列('close','open')之间的差值,检查是否大于等于0(returns逻辑向量) ,将其转换为二进制(as.integer
- TRUE -> 1,FALSE -> 0)然后将其更改为 factor
类型(如果需要)
我有包含列
的数据框date open high low close adjclose volume
我想再添加一个名为 "result" 的列(1 if close > open, 0 if close < open)
我愿意
# 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 个结果。问题出在哪里?
if/else
只能 return 一个 TRUE/FALSE 并且不会对长度 > 1 进行向量化。使用 ifelse
可能是合适的(但这也是不需要,并且与将逻辑向量直接强制转换为二进制(as.integer
)相比效率较低。在 OP 的代码中,'close' 列元素被循环(sapply
)并从整个 'open' 列。目的可能是进行元素减法。在这种情况下,列之间的 -
更加清晰和高效(因为这些操作是矢量化的)
data$result <- with(data, factor(as.integer((close - open) >= 0)))
在上面我们得到列('close','open')之间的差值,检查是否大于等于0(returns逻辑向量) ,将其转换为二进制(as.integer
- TRUE -> 1,FALSE -> 0)然后将其更改为 factor
类型(如果需要)