Ошибка, когда rbindlist в data.table в R [дубликат]

Объекты и массивы имеют множество встроенных методов, которые могут помочь вам в обработке данных.

Примечание: во многих примерах я использую функции arrow . Они аналогичны выражениям функции , но они связывают значение this лексически.

Object.keys() , Object.values() (ES 2017) и Object.entries() (ES 2017)

Object.keys() возвращает массив ключей объекта, Object.values() возвращает массив значений объекта, а Object.entries() возвращает массив ключей объекта и соответствующие значения в формате [key, value].

const obj = {
  a: 1
 ,b: 2
 ,c: 3
}

console.log(Object.keys(obj)) // ['a', 'b', 'c']
console.log(Object.values(obj)) // [1, 2, 3]
console.log(Object.entries(obj)) // [['a', 1], ['b', 2], ['c', 3]]

Object.entries() с (g15)
const obj = {
  a: 1
 ,b: 2
 ,c: 3
}

for (const [key, value] of Object.entries(obj)) {
  console.log(`key: ${key}, value: ${value}`)
}

Очень удобно повторять результат Object.entries() с для цикла и .

Цикл for-loop позволяет выполнять итерацию элементов массива. Синтаксис for (const element of array) (мы можем заменить const на var или let, но лучше использовать const, если мы не намерены изменять element).

Назначение destructuring позволяет извлекать значения из массива или объекта и назначать их переменным. В этом случае const [key, value] означает, что вместо назначения массива [key, value] на element мы назначим первый элемент этого массива key, а второй - value. Это эквивалентно этому:

for (const element of Object.entries(obj)) {
  const key = element[0]
       ,value = element[1]
}

Как вы можете видеть, деструктуризация делает это намного проще.

Array.prototype.every() и Array.prototype.some()

Метод every() возвращает true, если указанная функция обратного вызова возвращает true для каждого элемента массива. Метод some() возвращает true, если указанная функция обратного вызова возвращает true для некоторого (хотя бы одного) элемента.

const arr = [1, 2, 3]

// true, because every element is greater than 0
console.log(arr.every(x => x > 0))
// false, because 3^2 is greater than 5
console.log(arr.every(x => Math.pow(x, 2) < 5))
// true, because 2 is even (the remainder from dividing by 2 is 0)
console.log(arr.some(x => x % 2 === 0))
// false, because none of the elements is equal to 5
console.log(arr.some(x => x === 5))

Array.prototype.find() и Array.prototype.filter()

Методы find() возвращают первый ], который удовлетворяет предоставленной функции обратного вызова. Метод filter() возвращает массив из всех элементов, который удовлетворяет предоставленной функции обратного вызова.

const arr = [1, 2, 3]

// 2, because 2^2 !== 2
console.log(arr.find(x => x !== Math.pow(x, 2)))
// 1, because it's the first element
console.log(arr.find(x => true))
// undefined, because none of the elements equals 7
console.log(arr.find(x => x === 7))

// [2, 3], because these elements are greater than 1
console.log(arr.filter(x => x > 1))
// [1, 2, 3], because the function returns true for all elements
console.log(arr.filter(x => true))
// [], because none of the elements equals neither 6 nor 7
console.log(arr.filter(x => x === 6 || x === 7))

Array.prototype.map()

Метод map() возвращает массив с результатами вызова предоставленной функции обратного вызова для элементов массива.

const arr = [1, 2, 3]

console.log(arr.map(x => x + 1)) // [2, 3, 4]
console.log(arr.map(x => String.fromCharCode(96 + x))) // ['a', 'b', 'c']
console.log(arr.map(x => x)) // [1, 2, 3] (no-op)
console.log(arr.map(x => Math.pow(x, 2))) // [1, 4, 9]
console.log(arr.map(String)) // ['1', '2', '3']
]

Array.prototype.reduce()

Метод reduce() уменьшает массив до одного значения, вызывая предоставленную функцию обратного вызова с двумя элементами .

const arr = [1, 2, 3]

// Sum of array elements.
console.log(arr.reduce((a, b) => a + b)) // 6
// The largest number in the array.
console.log(arr.reduce((a, b) => a > b ? a : b)) // 3

Метод reduce() принимает необязательный второй параметр, который является начальным значением. Это полезно, когда массив, на который вы вызываете reduce(), может иметь нуль или один элемент. Например, если бы мы хотели создать функцию sum(), которая принимает массив в качестве аргумента и возвращает сумму всех элементов, мы могли бы написать это следующим образом:

const sum = arr => arr.reduce((a, b) => a + b, 0)

console.log(sum([]))     // 0
console.log(sum([4]))    // 4
console.log(sum([2, 5])) // 7

1
задан A5C1D2H2I1M1N2O1R2T1 18 March 2016 в 12:45
поделиться

2 ответа

Я не уверен на 100%, что ошибка в ваших данных, но попробуйте запустить код с

data = fread(input = "../data.txt", sep = "\t", fill = TRUE)

в параметрах fread. У меня была аналогичная ошибка, и казалось, что у fread возникли проблемы с идентификацией разделения столбцов. Установка fill в true позволяет fread заполнять любые отсутствующие данные - по крайней мере, тогда вы можете проверить полученный результирующий фрейм данных и выяснить, где находится странность.

4
ответ дан lmrta 25 August 2018 в 10:42
поделиться

Добавить fill = TRUE в синтаксис

Что происходит: Строки в данных имеют неравную длину. В этом синтаксисе пустые поля неявно заполняются.

0
ответ дан Robert 25 August 2018 в 10:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: