簡體   English   中英

替換中R的長度為零

[英]Replacement has length zero in R

我有這個函數,給我錯誤: 1111Error in b[i] <- z : replacement has length zero的錯誤: 1111Error in b[i] <- z : replacement has length zero ...我找不到原因...任何幫助都將受到歡迎:)

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的值。

如果您試圖使代碼基本相同,則需要類似以下內容:

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=" ")

...除非我誤解了您要做什么。

更新:

我錯過了有關出現在列表中的部分,因此這是使用修改后的代碼版本將它們保留為元組的方法:

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)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM