2013-03-01 23 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