2013-02-21 2 views
0

У меня есть входной файл, как этотдля нескольких столбцов одновременно в г

V1 V2 V3 V4.............V60 
11 22 33 44.............89 
21 98 22 33.............09 
33 44 55 78.............20 

Приведенный выше файл имеет более чем 3000 строк с 60 столбцов в каждой строке.

При попытке использования density(data, kernel="gaussian", bw=15) в моем р строке, то генерируется ошибка говоря

Error in density.default(data) : argument 'x' must be numeric 

Но, когда я пытаюсь density(data$V1, kernel="gaussian", bw=15), он отлично работает.

Мне было интересно, есть ли одна команда для вычисления плотности всего файла вместо того, чтобы делать это за каждый столбец 60 раз.

+1

Вы хотите 60 плотностей или 1 единую комбинированную плотность – csgillespie

+0

Привет @csgillespie, мне нужны все 60 плотностей для 3000 записей. Есть ли способ генерации плотностей для каждого значения? Я имею в виду, можно создать другой выходной файл, содержащий плотности, похожие на мой входной файл? Извините за очень простой вопрос, поскольку я родом из биологии. –

ответ

1

Возможно, вы ищете sapply или apply.
вы можете использовать

apply(myDataName, 2, density, kernel="gaussian", bw=15) 

если ваши столбцы factor s вместо numeric, вам нужно будет конвертировать те первые.

+0

Спасибо @ Ricardo. Но имеет ли значение 2 что-либо выше? Ваш код генерирует 60 плотностей. Оно работает. Но, я также интересовался каждым значением во входном файле, есть ли способ получить плотность? –

+0

yep, '2' относится к столбцам или, более конкретно, к 2-му измерению (что эквивалентно порядку информации, которую вы вернетесь из' dim (x) '). Для получения дополнительной информации о применении проверки '? Apply', и вы также можете выполнить поиск здесь, так как здесь есть много вопросов, охватывающих функции' * apply' –

+0

@jsmith, во вторую часть вашего вопроса: как конкретно вы определяете «каждое значение»? –

0

Скорее всего, ваш объект data является фреймом данных (это значение используется при чтении данных с использованием таких инструментов, как read.table и read.csv).

Если вы хотите обработать каждый столбец (создать отдельный график плотности для каждого столбца), то вы можете использовать функцию lapply.

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

+0

Спасибо @Greg. Но вышеприведенная команда Рикардо дает 60 плотностей. Мне было интересно узнать о возможности вычисления плотности при каждом значении. Таким образом, мой файл плотности будет иметь тот же формат данных, что и мой входной файл. –

+0

@jsmith, вы хотите плотность для каждой строки? в этом случае вы можете использовать 'apply', как указано выше, просто используйте 1 вместо 2. –

Смежные вопросы