2014-09-22 101 views
0

我是R新手,一直試圖通過谷歌和論壇在過去一週內找到解​​決方案。 我的問題:我有一個數據集,我需要繪製年齡。在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書(R的介紹)(http://cran.r-project.org/doc/manuals/r-release/R-intro.html)。否則,請編輯您的帖子,以便明確您的具體編程挑戰是什麼。你不知道如何繪製?測試趨勢?迭代列?子集範圍?定義一個函數?在一個問題中試圖涵蓋很多事情。 – MrFlick 2014-09-22 17:09:31

+2

做一個具體的例子,說10列,然後我們都可以玩相同的數據,也許會明白。 – Spacedman 2014-09-22 17:13:16

+0

謝謝你們的快速反應,我今天再次看看R指令(我做了一些教程,他們似乎沒有涵蓋我需要的問題......)。 我認爲我的主要問題是如何使它在數據集中循環(比如在Python中,你有「for in in bla」),同時存在一定的條件。 再次,爲無知道歉。 Spacedman - 我會明白的,明天早上可能會附上。 – 2014-09-22 17:24:55

回答

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

對不起,再次打擾你,但我可以問在這種情況下,如何在if語句下添加write.csv(stuff_want,file =「cow.csv」)函數。目前我已經嘗試在lapply()內外建立一個數據框。 我已經試過這個,但csv文件只有NA值。如果(coef(fit)[2]> 0){#使用條件012r填充stuff_want < - 數據幀(矩陣(ncol = 500,nrow = 40)) < stuff_want $ df#問題在於這裏 write.csv(stuff_want,file =「cow.csv」) }「 – 2014-10-02 17:18:04

+0

這會更好,因爲一個新問題,你的代碼'stuff_want < - data.frame(matrix(nc = 500) ,nr = 40))'創建一個包含500列和40行的數據框,用'NA'填充,'stuff_want < - stuff_want $ df'語句查找名爲'df'的列,就我所能看到的不存在,所以這應該將'stuff_want'設置爲'NULL'。我不知道你想完成什麼...... – jlhoward 2014-10-02 21:11:24