簡體   English   中英

從舊列表創建新列表 (R)

[英]Creating a new list from an old list (R)

作為 python 用戶,到目前為止,R 還是比較直觀的。 但是,我遇到了從舊列表創建新列表的問題。

具體來說,我有一個清單:

> x
[[1]]
  [1] "Heads" "Tails" "Tails" "Heads" "Tails" "Heads"
  [7] "Tails" "Tails" "Tails" "Heads" "Heads" "Tails"
  ... .... ... etc.

這是長度 100。我想遍歷這個列表並創建一個列表 y,其值為 'Heads' = 1,'Tails' = -1。 到目前為止我的嘗試:

> for (val in x) {
         ifelse(val == 'Heads', c(y,1), c(y,-1))}

其中附加了一個空列表 y。 但是,結果是長度為 2 的列表。有人可以幫我嗎?

您可以使用命名向量:

c("Heads" = 1, "Tails" = -1)[x[[1]]]
> Heads Tails Tails Heads Tails Heads Tails Tails Tails Heads Heads Tails 
      1    -1    -1     1    -1     1    -1    -1    -1     1     1    -1 

或者使用 boolean 轉換為數字來獲取向量(優雅但可能不是最有效的):

(x[[1]] == "Heads") * 2 - 1
> [1]  1 -1 -1  1 -1  1 -1 -1 -1  1  1 -1

據我了解,您有一個包含兩個唯一值的嵌套列表。 您可以為此使用lapply

x <- list(list("Heads","Tails","Heads"),list("Heads","Tails","Tails"))
lapply(x, function(x){y <- ifelse(x == "Heads", 1, -1); names(y) <- x; y})

# [[1]]
# Heads Tails Heads 
# 1    -1     1 
# 
# [[2]]
# Heads Tails Tails 
# 1    -1    -1

或者,如果您不需要名稱,請使用rapply

x <- list(list("Heads","Tails","Heads"),list("Heads","Tails","Tails"))
rapply(x, function(x){ifelse(x == "Heads", 1, -1)})

暫無
暫無

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

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