Как я могу удалить компонент из списка в R? - PullRequest
3 голосов
/ 18 февраля 2012

Я пытаюсь удалить компонент из списка в R, но он не работает.

У меня есть такой список:

> myList
[[1]]
[[1]][[1]]
[1] "Sunny"  "Cloudy" "Rainy" 

[[1]][[2]]
[1] "Warm" "Cold"

[[1]][[3]]
[1] "Normal" "High"  

[[1]][[4]]
[1] "Strong" "Weak"  

[[1]][[5]]
[1] "Warm" "Cool"

[[1]][[6]]
[1] "Same"   "Change"


[[2]]
[[2]][[1]]
[1] "Sunny"  "Cloudy" "Rainy" 

[[2]][[2]]
[1] "Warm" "Cold"

[[2]][[3]]
[1] "Normal" "High"  

[[2]][[4]]
[1] "Strong" "Weak"  

[[2]][[5]]
[1] "Warm" "Cool"

[[2]][[6]]
[1] "Same"   "Change"

Могу ли я удалить компонент, подобный этому: > myList = mylist[[-particularIndex]]? Я хочу такой результат:

[[1]]
[[1]][[1]]
[1] "Sunny"  "Cloudy" "Rainy" 

[[1]][[2]]
[1] "Warm" "Cold"

[[1]][[3]]
[1] "Normal" "High"  

[[1]][[4]]
[1] "Strong" "Weak"  

[[1]][[5]]
[1] "Warm" "Cool"

[[1]][[6]]
[1] "Same"   "Change"

Я не могу сделать метку имени строки для этого списка. Я должен ссылаться на строки по index(particular index) (использование rownames(myList) для удаления чего-либо мне не поможет).

Ответы [ 4 ]

7 голосов
/ 18 февраля 2012

Я думаю, что вы очень близко подошли к правильному ответу:

> x <- list(list(1:3, 4:6), list(4:7, 2:3), list(4:6,1:2))
> x[-2]
[[1]]
[[1]][[1]]
[1] 1 2 3

[[1]][[2]]
[1] 4 5 6


[[2]]
[[2]][[1]]
[1] 4 5 6

[[2]][[2]]
[1] 1 2

Вышеприведенное работает, чтобы избавиться от оригинального второго компонента.Отметьте одиночные квадратные скобки и сравните их с:

x [[- 2]]

Error in x[[-2]] : attempt to select more than one element

Двойные квадратные скобки не работают.(На самом деле это работает, если в списке только два компонента, но не зависит от этого.)

Существует множество мест, которые объясняют одинарные или двойные квадратные скобки.Один из них - круг 8.1.54 из «The R Inferno» http://www.burns -stat.com / pages / Tutor / R_inferno.pdf

2 голосов
/ 18 февраля 2012

Я думаю, это потому, что ваши списки так сильно вложены.Я попытался воспроизвести ваши данные и мог использовать:

(x <- list(c(list(c(1)),list(c(10:15)),list(c(2))),c(list(c(1:4)), list(c(3:5)))))

Я не знаю, является ли наличие такого сильно вложенного списка преднамеренным или нет, но это может быть причиной многих проблем.Вы можете попробовать присвоить NULL «компонентам», как в:

x[[1]][[1]][[1]] <- NULL
0 голосов
/ 16 июня 2015

Назначение члена списка в NULL - это стандартный способ удаления элементов списка. Для именованных списков это может быть самый простой способ сделать это. например,

myList <- list(a = list(x = 1, y = 2), b = list(d = 3, e = 4))
myList$a$y <- NULL
myList$b <- NULL
myList[["a"]] <- NULL

Он также работает с data.frames (это просто особый тип списка).

Иногда это может привести к путанице. Например:

x <- as.list(LETTERS[1:10])
fn <- function(y) if(y == 7) NULL else y
for (i in 1:10) x[[i]] <- fn(i)

Ожидаемое содержимое x[[7]] может быть NULL, но на самом деле это "H". Присвоение NULL x[[7]] удаляет члена списка, сдвигая x[[8]] вниз.

0 голосов
/ 15 июня 2015

Можно избавиться от нескольких строк с помощью списка из 220 элементов, скажем, list [-c (69,213,214,215,216)], для списка из двух списков <- list [-c (1,2)].Не забудьте указать as.matrix. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...