2016-03-05 35 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