2011-02-17 77 views
0

用一个简单的矩阵和一个简单的函数开始:如何将矩阵行的元素传递给R函数的参数?

numbers <- matrix(c(1:10), nrow = 5, ncol=2) 

numbers 
    [,1] [,2] 
[1,] 1 6 
[2,] 2 7 
[3,] 3 8 
[4,] 4 9 
[5,] 5 10 

add <- function(x,y){ 
    sum <- x + y 
    return(sum) 
    } 

我想补充一点,通过采取每行的前两个元素应用add函数第三列。

cheet_sheet <- cbind(numbers, apply(numbers,<MARGIN=first_2_elements_of_row>, add)) 

保证金似乎是一个自然的地方来指定这个,但MARGIN = 1是不够的,因为它似乎只从每行需要一个变量,而我需要两个。

回答

2

使用apply将每个选定的边距作为函数的第一个参数发送。然而,你的函数需要两个参数。一种方式做到这一点不改变你的函数将通过定义矢量(每行)的功能和发送的第一个元素作为第一个参数,第二个元素是第二:

numbers <- matrix(c(1:10), nrow = 5, ncol=2) 

add <- function(x,y){ 
    sum <- x + y 
    return(sum) 
    } 

cheet_sheet <- cbind(numbers, apply(numbers,1, function(x)add(x[1],x[2]))) 

不过,我想这是意味着纯粹的理论?在这种情况下,这会容易得多:

cheet_sheet <- cbind(numbers, rowSums(numbers)) 
+0

好极了!是的,这是一个理论上的例子。我打算将字符串传递给一个更复杂的函数,它将返回一个数值。我只是无法从帮助(应用)的例子中把你的答案放在一起。 – Milktrader 2011-02-17 03:13:51

+1

在你的函数中放入一个`browser()`调用,并用`str`和亲戚来“环视”。 – 2011-02-17 09:33:43

2

为什么不直接使用mapply

> cbind(numbers, mapply(add, numbers[,1], numbers[,2])) 

    [,1] [,2] [,3] 
[1,] 1 6 7 
[2,] 2 7 9 
[3,] 3 8 11 
[4,] 4 9 13 
[5,] 5 10 15 
相关问题