2013-10-25 86 views
1

我有這個功能是給我的錯誤:1111Error in b[i] <- z : replacement has length zero ......我找不到爲什麼...任何幫助將受到歡迎:)更換具有零長度R中

a <- expand.grid(rep(list(1:4), 4)) 
b <- numeric(256) 

generating_numbers <- function() { 
for(i in 1:nrow(a)) { 
    for(j in 1:ncol(a)) { 
     z <- cat(a[i,j]) } 
    b[i] <- z } 
} 

generating_numbers() 

目的是在這裏將expand.grid生成的號碼組合保存到b的列表中。一切正常,而不是更改b的值。

+2

也許你只是想'apply(a,1,paste0,collapse =「」)'? – joran

+0

爲什麼你在分配中使用'cat()'? – TheComeOnMan

+1

如果你想明白爲什麼它不起作用,請考慮這一點:'cat'不返回一個值,它將它打印在屏幕上。你正在尋找的是'paste0'(例如'z < - paste0(z,a [i,j])') – Jealie

回答

1

如果你想保持代碼基本上是相同的,你會需要這樣的東西:

a <- expand.grid(rep(list(1:4), 4)) 
b <- numeric(256) 

generating_numbers <- function() { 
for(i in 1:nrow(a)) { 
    z <- paste(a[i,],collapse=" ") 
    b[i] <- z } 
} 

generating_numbers() 

第二for()循環是不必要的,因爲你正在試圖獲得的數字組合,所以你不」噸要遍歷每個列...

...但你很可能在完成一個行同樣的事情:

b <- apply(a,1,paste,collapse=" ") 

...ü不好意思,我誤解了你想做的事情。

UPDATE:

我錯過了部分則以列表之中,所以這裏是你會如何使用您的代碼的修改版本保持他們的元組:

a <- expand.grid(rep(list(1:4), 4)) 

generating_numbers <- function() { 
    b <- NULL 
    for(i in 1:nrow(a)) { 
    z <- a[i,] 
    b[[i]] <- as.numeric(z) } 
    return(b) 
} 

generating_numbers() 

...或你可以利用這樣一個事實,即數據幀是像這樣的列表:

b <- as.list(as.data.frame(t(a)))