2016-02-15 64 views
-4

使用R我想生成一个矩阵,其中epsilons是列,行是输入数据。然而,当我尝试分配一个值到矩阵的错误出现:作为逻辑运算结果的R中的矩阵赋值

“错误的结果[,j]的< - (概率> epsilons [j]的): 更换具有长度零”

我尝试了很多方法,但我坚持这一点。请注意,当使用oracle R对象时会发生此问题。看到小代码下面能重现问题:

library(ORE) 

ore.connect(user="XXXX", service_name="XXXXX", host="XXXXXXXX", password="XXXXX", port=XXXX, all=TRUE) 
ore.sync('MYDATABASE') 
ore.attach() 

ore.pull(MY_TABLE) 

trainingset <- MY_TABLE$MY_COLUMN[1:1000] 
crossvalidationset <- MY_TABLE$MY_COLUMN[1001-2000] 

# Training 
my_column_avg <- mean(trainingset) 
my_column_std <- sd(trainingset) 

# Validation 
probabilities <- dnorm(crossvalidationset,my_column_avg,my_column_std) 

epsilons <- c(0.01,0.05,0.1,0.25,0.5,0.75,0.8) 

num_rows <- length(probabilities) 
num_cols <- length(epsilons) 
results <- matrix(TRUE, num_rows, num_cols) 

# Anomaly detection results for several epsilons 
for(j in 1:num_cols) 
{  
    results[,j] <- (probabilities > epsilons[j]) 
} 
+1

什么是'inkpressureprob'?我将它设置为0.12,脚本运行良好。 –

+0

嗨,请更换inkpressureprob的概率。看看上面的新代码。 – Humberto

+1

你的代码适合我! – Paul

回答

0

对象MY_TABLE是Oracle表对象不是数据帧以及概率,因为它是从MY_TABLE的。 然而,当赋值被试图R矩阵比在下面的行中发生的如所示的错误:

results[,j] <- (probabilities > epsilons[j]) 

上述错误的原因是由于使用甲骨文研究库(ORE) 。

如果在上面的代码中使用了通用的R数据结构,那么自始至终都不会发生这个问题。例如,通过将MY_TABLE oracle对象替换为数据框。

因此,尽可能摆脱Oracle R对象并使用R数据帧是一种好的做法。