2016-03-05 69 views
0

我以R.開頭 我已經在列表中取得了2d樣本。此列表中包含2個向量與100種元素的任一個:應用自己的函數列出R

muestra2d <- take_samples(2, 100, c(-100, 100)); 

我已經計算係數m和一行中的b形式y=mx+b在一個盒子中的給定範圍內的功能。

vars <- sim_line(c(-100, 100)) 

好的,我的目的是應用一個函數f(x,y)=y-ax-b其中xmuestra2d[1]的元素,ymuestra2d[2]的元素,a是的線(M)的斜率和b是線的偏移量。該函數必須用每對值(x,y)的函數符號標記樣本。

我這一行

result <- lapply(muestra2d, function(x,y) (y-(vars[5]*x)-vars[6])) 

思維lapply需要一個元素從列表並將其複製在x的第一載體試了一下,做同樣的y和應用功能,此值,但這不是一個好主意。

我該怎麼做?我如何在同一時間用另一種顏色繪製線條,點和負點?

+0

運算在在R的矢量化,這樣就可以只寫像'結果< - muestra2d [1,2] - 瓦爾[5] * muestra2d [2,1] - 瓦爾[6]' 。我可能沒有索引權,因爲我不知道'take_samples()'的輸出結果如何。 – Stibu

+0

'take_samples()'的輸出返回兩個向量的列表。你看到像矩陣一樣的任務。我已經重新解釋了你的表達式:'result < - muestra2d [[1]] - vars [5] * muestra2d [[2]] - vars [6]'。有了這個,我正在評估第一個矢量和第二個muestra2d中相同索引的表達式。感謝您的評論,我的朋友。 – Carlos

+2

'2dsample'不是一個對象的有效名稱。 – jogo

回答

1
set.seed(1L); 
take_samples <- function(sample.num,elem.num,box) lapply(seq_len(sample.num),function(i) runif(elem.num,box[1L],box[2L])); 
sim_line <- function(box) c(1,0); 
box <- c(-100,100); 
muestra2d <- take_samples(2L,100L,box); 
vars <- sim_line(box); 
signs <- sign(muestra2d[[2L]] - vars[1L]*muestra2d[[1L]] - vars[2L]); 
par(xaxs='i',yaxs='i'); 
plot(NA,xlim=box,ylim=box,xlab='x',ylab='y',main='plot'); 
abline(vars[2L],vars[1L]); 
with(setNames(muestra2d,c('x','y')),{ 
    points(x[signs>=0],y[signs>=0],col='green'); 
    points(x[signs<0],y[signs<0],col='red'); 
}); 

plot

+0

真棒,我的朋友。這是我正在尋找的東西,但我是初學者,很難理解你的代碼。 – Carlos

+0

閱讀並重新讀取您的代碼後,最後在我的目的下工作。我不得不重新解釋和重寫一些東西,但你給了我真正的幫助。謝謝大家! – Carlos