как последовательно извлекать данные из списка - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть такая матрица

df1 <- sample(seq(1,10), size=100, replace=TRUE, prob=c(.02,.01,.01,.01,.01,.01,.005,.005,.01,.01))
df2 <- sample(seq(1,10), size=100, replace=TRUE, prob=c(.02,.01,.01,.01,.01,.01,.005,.005,.01,.01))
df3 <- sample(seq(1,10), size=100, replace=TRUE, prob=c(.02,.01,.01,.01,.01,.01,.005,.005,.01,.01))
df4 <- sample(seq(1,10), size=100, replace=TRUE, prob=c(.02,.01,.01,.01,.01,.01,.005,.005,.01,.01))
df5 <- sample(seq(1,10), size=100, replace=TRUE, prob=c(.02,.01,.01,.01,.01,.01,.005,.005,.01,.01))
df6 <- sample(seq(1,10), size=100, replace=TRUE, prob=c(.02,.01,.01,.01,.01,.01,.005,.005,.01,.01))
df7 <- sample(seq(1,10), size=100, replace=TRUE, prob=c(.02,.01,.01,.01,.01,.01,.005,.005,.01,.01))
df8 <- sample(seq(1,10), size=100, replace=TRUE, prob=c(.02,.01,.01,.01,.01,.01,.005,.005,.01,.01))
df9 <- sample(seq(1,10), size=100, replace=TRUE, prob=c(.02,.01,.01,.01,.01,.01,.005,.005,.01,.01))
df10 <- sample(seq(1,10), size=100, replace=TRUE, prob=c(.02,.01,.01,.01,.01,.01,.005,.005,.01,.01))
df <- rbind(df1,df2,df3,df4,df5,df6,df7,df8,df9,df10)

У меня есть такой вектор

dft <- sample(seq(1,10), size=100, replace=TRUE, prob=c(.02,.01,.01,.01,.01,.01,.005,.005,.01,.01))

Затем я выполняю свой тест с такими данными

t<- sapply(1:nrow(df), function(i) ks.test(as.vector(df[i,]), as.vector(dft)))

У меня есть файл списка с именем t , который дает мне значения D и значения p.values, я хочу извлечь их и отобразить их, когда они превышают 100. Есть ли способ сделать это, вместо этого переходя к каждомуиз них один за другим?Структура списка показана ниже: str (t)

List of 50
 $ : Named num 0.09
  ..- attr(*, "names")= chr "D"
 $ : num 0.813
 $ : chr "two-sided"
 $ : chr "Two-sample Kolmogorov-Smirnov test"
 $ : chr "as.vector(df[i, ]) and as.vector(dft)"
 $ : Named num 0.11
  ..- attr(*, "names")= chr "D"
 $ : num 0.581
 $ : chr "two-sided"
 $ : chr "Two-sample Kolmogorov-Smirnov test"
 $ : chr "as.vector(df[i, ]) and as.vector(dft)"
 $ : Named num 0.09
  ..- attr(*, "names")= chr "D"

Я вижу, что длина моего списка

length(t)
[1] 377930

Я хочуизвлекать каждые две данные и оставлять остальные в кадре данных.

Мне это нравится вручную

c(t[[1]],t[[2]])
c(t[[6]],t[[7]])
c(t[[11]],t[[12]])
c(t[[21]],t[[22]])
c(t[[26]],t[[27]])
c(t[[31]],t[[32]])
c(t[[36]],t[[37]])

Есть ли лучший способ извлечь данные из списка, как указано выше?

Я тоже пытался сделать это, используя следующеебезуспешно

result<- data.frame(matrix(NA, nrow = length(t), ncol = 1))
m <- seq(1,length(t),by=5)
for (i in seq_along(m)){
  result[[i]] = c(t[[i]]) 
  if ( i*2 > length(t) ){
    break
  }
}

1 Ответ

0 голосов
/ 16 февраля 2019

Структура t является повторяющимся шаблоном с заданной длиной, с которым мы можем работать намного проще, если превратить его в матрицу:

t_matrix <- matrix(t, ncol=5, byrow=T)

t_matrix
      [,1] [,2]      [,3]        [,4]                                 [,5]                                   
 [1,] 0.11 0.5806178 "two-sided" "Two-sample Kolmogorov-Smirnov test" "as.vector(df[i, ]) and as.vector(dft)"
 [2,] 0.08 0.9062064 "two-sided" "Two-sample Kolmogorov-Smirnov test" "as.vector(df[i, ]) and as.vector(dft)"
 [3,] 0.11 0.5806178 "two-sided" "Two-sample Kolmogorov-Smirnov test" "as.vector(df[i, ]) and as.vector(dft)"
 [4,] 0.08 0.9062064 "two-sided" "Two-sample Kolmogorov-Smirnov test" "as.vector(df[i, ]) and as.vector(dft)"
 [5,] 0.04 0.9999982 "two-sided" "Two-sample Kolmogorov-Smirnov test" "as.vector(df[i, ]) and as.vector(dft)"
 [6,] 0.05 0.9996333 "two-sided" "Two-sample Kolmogorov-Smirnov test" "as.vector(df[i, ]) and as.vector(dft)"
 [7,] 0.15 0.2105516 "two-sided" "Two-sample Kolmogorov-Smirnov test" "as.vector(df[i, ]) and as.vector(dft)"
 [8,] 0.08 0.9062064 "two-sided" "Two-sample Kolmogorov-Smirnov test" "as.vector(df[i, ]) and as.vector(dft)"
 [9,] 0.08 0.9062064 "two-sided" "Two-sample Kolmogorov-Smirnov test" "as.vector(df[i, ]) and as.vector(dft)"
[10,] 0.1  0.6993742 "two-sided" "Two-sample Kolmogorov-Smirnov test" "as.vector(df[i, ]) and as.vector(dft)"

Указав byrow=T, R будетзагружать данные в матрицу из 5 столбцов по строкам, а не по столбцам, как по умолчанию.Теперь, когда у вас есть матрица, вы можете просто установить ее на подмножество, как и любую другую матрицу или фрейм данных:

t_matrix[,c(1,2)]
      [,1] [,2]     
 [1,] 0.11 0.5806178
 [2,] 0.08 0.9062064
 [3,] 0.11 0.5806178
 [4,] 0.08 0.9062064
 [5,] 0.04 0.9999982
 [6,] 0.05 0.9996333
 [7,] 0.15 0.2105516
 [8,] 0.08 0.9062064
 [9,] 0.08 0.9062064
[10,] 0.1  0.6993742
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...