簡體   English   中英

防止R嵌套列表轉換為命名向量

[英]preventing R nested list from being converted to named vector

我想創建一個嵌套列表,例如,

> L <- NULL
> L$a$b <- 1
> L
$a
$a$b
[1] 1

因為我需要在循環中進行賦值,所以我必須使用括號而不是美元,例如,

> L <- NULL
> a <- "a"
> b <- "b"
> L[[a]][[b]] <- 1
> L
a 
1
> b <- "b1"
> L[[a]][[b]] <- 1
Error in L[[a]][[b]] <- 1 : 
  more elements supplied than there are to replace

這超出了我的預期:L成為命名向量而不是嵌套列表。 但是,如果指定的值是長度超過1的向量,則問題將消失,

> L <- NULL
> L[[a]][[b]] <- 1:2
> L
$a
$a$b
[1] 1 2
> b <- "b1"
> L[[a]][[b]] <- 1
> L
$a
$a$b
[1] 1 2

$a$b1
[1] 1

我的大多數作業都超過1,這就是我的代碼看似有效但有時失敗的原因。 我想知道是否有任何方法可以解決這種意外行為,謝謝。

你可以明確地說每件事都應該是它自己的清單

> L <- list()
> L[[a]] <- list()
> L[[a]][[b]] <- 1
> L
$a
$a$b
[1] 1

但聽起來如果你解釋你的實際目標,可能有更好的方法來做你想要的。

看幫助(“[[”)

當$ < - 應用於NULL x時,它首先將x強制轉換為list()。 這也是[[< - 如果替換值的長度大於1的情況:如果值的長度為1或0,則x首先被強制為值類型的零長度向量。

暫無
暫無

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

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