2013-03-01 28 views
1

我是一个新手谈到'R',但我读了相当多的信息,我仍然不明白为什么我不能打印矢量我返回我的函数fn - 我只是得到值“NULL”。这个函数的目标是从两个数组中取值,并将它们加在一起并放入一个新数组中。我使用print(test)命令检查数组中的数字是否正确添加在一起。也许我错了?我现在没有看到问题。问题与函数不返回一个向量

fn <- function(x,y) { 
liste <- vector(mode = "numeric", length = 192) 
k <- 0 
for (i in 1:(length(x))) { 
    for (j in 1:(length(y))) { 
     test<-x[i] + y[j] 
     print(test) 
     append(liste,test, after=k) 
     k <- k +1 
    } 
} 
return(liste) 
} 

event1 = c(0.0,5.0,10.0,12.0) 
event2 = c(0.0,3.0,5.0,7.0) 
event3 = c(6.0,8.0,10.0,10.0,12.0,13.0,13.0,14.0,16.0,17.0,17.0,20.0) 

z <-fn(event2,event3) 
names(z) 

回答

6

首先,z是(完全的0 S)的载体,它只是一个不知名的载体。这就是为什么names(z)返回NULL

其次,在你的方法,这行:

append(liste,test, after=k) 

应该简单地:

liste[k] = test 

这是因为append变化所传递的载体,它只是返回一个新的。

然而,有做你想要做什么,使用expand.grid功能更简单的方法:

fn <- function(x, y) { 
    rowSums(expand.grid(x, y)) 
} 
+0

(+1)的最后一行是实际的答案。我只是写这个。 – Arun 2013-03-01 20:39:37

+0

感谢您的回答。但是,如何将一个返回值赋给一个变量,如果我不能做z <-fn(event2,event3)? – John 2013-03-01 20:44:02

+0

+1矢量化的迷人。 – 2013-03-01 20:44:27