2014-09-22 3 views
0

Я новичок в R и пытаюсь найти решение этой проблемы на прошлой неделе через google и форумы. Моя проблема: у меня есть набор данных, который мне нужно построить против возраста. В течение 40 различных условий существует более 1000 переменных с различным измерением. выглядит так:Функция множественного участка R

Age Variables1 Variable2 (....) Variable1000 > 
|  | 
|  | 
v  v 

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

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

plotest <- function(lung){ 
    # need to add the condition of abline function coefficient > 0 before plotting  
    plot(lung$Age, lung$hsa.let.7a.1, xlab = "Age", ylab = "miRNA") 
    abline(lm(lung$hsa.let.7a.1 ~ lung$Age), col= "red") 
    return(plot) 
} 
par(mfrow=c(2,2)) 
for (i in lung{plotest(i)}) 

Я знаю, что это в основном неправильно. Так что извините за все это ужасно.

Может ли кто-нибудь привести меня к каким-либо источникам, которые я мог бы упустить из-за того, как указывать диапазоны в таких больших наборах данных? И функциональная грамматика? Я сделал некоторые Python, но нашел R гораздо более запутанной в связи с этим ...

Спасибо всем, Пол

+0

Непонятно, что именно вы спрашиваете. Похоже, вы все еще просто не понимаете, как работает R. Я бы рекомендовал рассмотреть [введение в R] (http://cran.r-project.org/doc/manuals/r-release/R-intro.html) книгу R, которую вы можете получить из библиотеки. В противном случае отредактируйте свой пост, чтобы он дал понять, какова ваша конкретная задача программирования. Вы не знаете, как сюжет? Тест на тренд? Итерации по столбцам? Диапазоны подмножества? Определить функцию? Это очень много вещей, чтобы попытаться охватить в одном вопросе. – MrFlick

+2

Сделайте конкретный пример, скажем, 10 столбцов, и тогда мы все можем играть с одними и теми же данными и, возможно, дойти до сути. – Spacedman

+0

Благодарим вас за быстрые ответы, я снова просмотрю инструкцию R (я сделал несколько учебников, которые, как мне казалось, не охватывают вопрос, который мне нужен ...). Я думаю, что моя главная проблема заключается в том, как заставить его циклически перемещаться по набору данных (скажем, в Python у вас есть «для i в bla»), пока присутствует определенное условие. Опять же, извинения за незнание. Spacedman - Я позабочусь об этом, вероятно, прикрепим его завтра утром. –

ответ

0

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

# make up some data 
x <- seq(1,10,len=100) 
set.seed(1) # for reproducible example 
df <- data.frame(x,y1=1+2*x+rnorm(100), 
        y2=3-4*x+rnorm(100), 
        y3=2+0.001*x+rnorm(100)) 

# this does the work... 
lapply(colnames(df)[-1],function(col){ 
    form <- formula(paste(col,"x",sep="~")) 
    fit <- lm(form,df) 
    if (coef(fit)[2] >0) { 
    plot(form,df) 
    abline(fit) 
    } 
}) 

Ваш код не был, что далеко. В этом примере все имена столбцов, кроме первого (colnames(df)[1]), передаются по одной функции. Функция создает переменную формулы, используя имя столбца и имя первого столбца, вызывает lm(...), проверяет, что коэффициент x равен> 0, и если это так отображает данные и линию наилучшего соответствия.

Посмотрите документацию по адресу formula(...), lm(...) и coef(...). Обратите внимание, что этот пример имеет переменную y3 с уклоном, который положителен, но не сильно отличается от 0. Вам следует подумать о том, как вы хотите справиться с этой ситуацией.

+0

Извините, что беспокою вас снова, но могу ли я спросить, как добавить функцию write.csv (stuff_want, file = "cow.csv") в выражении if в этом случае. в настоящее время я попытался установить кадр данных снаружи и внутри lapply(). Я пробовал это в основном, но файл csv имеет только значения NA. "lapply (.... { stuff_want <- data.frame (matrix (ncol = 500, nrow = 40)) if (coef (fit) [2]> 0) {#обучение с условием stuff_want <- stuff_want $ df # problem лежит здесь write.csv (stuff_want, file = "cow.csv") } " –

+0

Это было бы лучше, как новый вопрос. Ваш код' stuff_want <- data.frame (matrix (nc = 500 , nr = 40)) 'создает кадр данных с 500 столбцами и 40 строками, заполненными' NA'. Оператор 'stuff_want <- stuff_want $ df' ищет столбец с именем' df', который, насколько я могу видеть не существует. Поэтому это должно установить 'stuff_want'' NULL'. Я понятия не имею, что вы пытаетесь выполнить ... – jlhoward

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