2016-12-12 5 views
0

Я пытаюсь заменить значение Массив x, если x меньше 0,000001, тогда x будет равен 0,000001. Затем верните log (x).Scala: значение <не является членом массива [Double]

Вот мой код Scala:

def log(args: Array[Double]){ 
    var x = Array.fill(20){math.random} 

    if(x < 0.000001){ // error: value < is not a member of Array[Double] 
     x == 0.000001} 
    else{scala.math.log(x)} // error: type mismatch, it found Array[Double], required: double 

} 

Спасибо за вашу помощь! Я действительно действительно новичок в Scala, без предварительного опыта в кодировании, кроме R

+3

'x'' '' Array'. Он содержит 20 значений. Вам нужно что-то, что вытаскивает каждое из этих значений один за другим, чтобы вы могли сравнивать и изменять. (Подсказка: рифмы с «nap».) – jwvh

+1

Возможно, вы захотите также вернуть что-то из этого метода. Что вам нужно, чтобы вернуться из метода? – radumanolescu

ответ

2

Это даст вам новый массив с измененными значениями:

val xx = x.map { y => if (y < 0.000001) 0.000001 else scala.math.log(y) } 

я собираюсь предположить, что вы хотите возвращает новый массив из метода, так:

def log(args: Array[Double]): Array[Double] = { 
    var x = Array.fill(20){math.random} 
    x.map { y => if (y < 0.000001) 0.000001 else scala.math.log(y) } 
} 
+0

=> в Scala используется для типов функций, литералов функций и переименования импорта. Здесь то, что он делает, отображает каждое значение x, т. Е. Y аргументу функции, используемой в RHS – kuriouscoder

+0

Большое спасибо! Очень признателен! –

2

в дополнение к ответу radumanolescu, вы можете также применить функцию карты с футляром, как показано ниже (это хороший трюк, чтобы иметь втулку, особенно для вложенных КСФ или значение привязки):

x.map { 
    case y if y >= 0.000001 => scala.math.log(y) 
    case y => y 
} 
+0

Спасибо за помощь! Очень признателен ! –