Пути к избранным столбцам только для чтения из файла в R? (Золотая середина между 'read.table' и 'сканированием'?) [дубликат]

Этот вопрос уже имеет ответ здесь:

У меня есть некоторые очень большие разграниченные файлы данных, и я хочу обработать только определенные столбцы в R, не не торопясь и памяти для создания a data.frame для целого файла.

Единственные опции, о которых я знаю, read.table который очень расточителен, когда я только хочу несколько столбцов или scan который кажется слишком низким уровнем для того, что я хочу.

Существует ли более оптимальный вариант, или с чистым R или возможно обращающийся к некоторому другому сценарию оболочки, чтобы сделать извлечение столбца и затем использующий сканирование или read.table на, оно производится? (Который приводит к вопросу, как назвать сценарий оболочки и получить его вывод в R?).

40
задан Blue Magister 20 September 2013 в 18:14
поделиться

4 ответа

Иногда я делаю что-то подобное, когда у меня есть данные в файле с разделителями табуляцией:

df <- read.table(pipe("cut -f1,5,28 myFile.txt"))

Это позволяет cut выполнять выбор данных, что можно сделать без использования большого количества памяти.

См. Только чтение ограниченного числа столбцов для чистой версии R с использованием «NULL» в аргументе colClasses в read.table ].

35
ответ дан 27 November 2019 в 01:42
поделиться

Я думаю, что подход Дирка прост и быстр. Альтернативой, которую я использовал, является загрузка данных в sqlite, который загружается НАМНОГО быстрее, чем read.table (), а затем извлекает только то, что вы хотите. пакет sqldf () упрощает все это. Вот ссылка на предыдущий ответ о переполнении стека, в котором приводятся примеры кода для sqldf ().

8
ответ дан 27 November 2019 в 01:42
поделиться

Вероятно, это больше, чем вам нужно, но если вы работаете с очень большими наборами данных, вы также можете посмотреть в пакет HadoopStreaming , который предоставляет подпрограмму сокращения карты с использованием Hadoop .

3
ответ дан 27 November 2019 в 01:42
поделиться

Лучший способ стать лучше - это нанимать только тех, кто хочет стать лучше. Тогда вы должны поддерживать этих людей, когда они совершают ошибки в поисках лучшего. Тот путь они не боятся пробовать новое.

Есть поговорка, которую я слышал в США: «Наймите людей с GPA менее 3,9 (из 4,0)»; это отражает цель нанять людей, которые не сделали идеально (то есть они научились быть не идеальными).

Одним из лучших способов стать лучше является «бережливое» мышление, которое породило методологии Agile, а также значительное количество успешных примеров в производстве.

Общая идея состоит в том, чтобы постоянно участвовать в итеративном процессе самооценки и никогда не тратить ресурсы или иметь блоки в рабочем процессе. К этому, конечно, нужно относиться с осторожностью: исследовательские проекты настолько плохо определены, что их почти нельзя поставить на конвейер, и большая часть разработки программного обеспечения - это исследование.

Для языка ваши разработчики должны быть осведомлены о последних вопросах безопасности, их установки должны быть обновлены ИТ-персоналом, компания должна финансировать некоторое количество учебных материалов, будь то курсы, книги, конференции или то, что у вас есть.

В целом, общая концепция заключается в том, что качество - это бизнес каждого, и это нормально, чтобы занять время, чтобы сделать это правильно .

-121--3603160-

Текстовые поля не вызывают метод OnPaint (см. раздел Примечание на этой страницы ). Способ обойти это, чтобы поместить текстовое поле в панель, которая немного больше. Затем измените цвет фона при каждом нажатии кнопки. Поток на форумах MSDN содержит несколько решений.

Изменить Чтобы уточнить решение панели, просто создайте панель и добавьте в нее текстовое поле: Например,

private void MyForm_Load(object sender, EventArgs e)
{
     myPanel.Controls.Add(tbxLastName); //Make sure the panel size is slightly bigger than the text box (so that it looks like a border)
}

Затем обработайте событие нажатия кнопки:

private void myButton_Click(object sender, EventArgs e)
    {
        if (tbxLastName.Text == "")
        {
            myPanel.BackColor = Color.Red;
        }
        else
        {
            myPanel.BackColor = Color.Transparent;
        }
    }
-121--4817706-

Одна из возможностей состоит в том, чтобы использовать pipe () вместо имени файла и чтобы awk или подобные фильтры извлекали только нужные столбцы.

Дополнительные сведения о канале и друзьях см. в справке (соединение) .

Edit : read.table () также может сделать это для вас, если вы очень явно говорите о colClasses - значение NULL для данного столбца пропускает столбец alltogether. См. справку (read.table) . Так что у нас есть решение в базе R без дополнительных пакетов или инструментов.

19
ответ дан 27 November 2019 в 01:42
поделиться
Другие вопросы по тегам:

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