2014-11-13 5 views
0

Этот вопрос связан с этим here Я принял слишком рано, так как он не решает, что мне действительно нужно.Работа с нерасщеплением в R

Данные выглядит так:

m4 <- read.table(header=T, text=' 
model1 model2 model3 Output Model 
0.13 0.113 0.18  0.4  m4 
0.157 0.11  0.21  0.50 m4 
0.058 0.03  0.18  0.46 m4 ') 

m3 <- read.table(header=T, text=' 
model1 model2 model3 Output Model 
0.13 0.113 0.18  0.4  m3 
0.157 0.11  0.21  0.50 m3 
0.058 0.03  0.18  0.46 m3 ') 

m2 <- read.table(header=T, text=' 
model1 model2 model3 Output Model 
0.200 0.099  NA  NA  m3 
0.356 0.25  NA  NA  m3 ') 

m1 <- read.table(header=T, text=' 
model1 model2 model3 Output Model 
0.200 0.099  0.3  0.9 m1 
0.35  0.252  0.4  0.9 m1 ') 

models <- list(m4=m4, m3=m3, m2=m2, m1=m1) 

EDIT1:

Желаемый результат с Нерасщепленным:

model1 model2 model3 Output Model 
0.200 0.099  0.3  0.9  m1 
0.35 0.252  0.4  0.9  m1 
0.13 0.113 0.18  0.4  m4 
0.157 0.11  0.21  0.50 m4 
0.058 0.03  0.18  0.46 m4 

Нужный soulution должен быть в пределах unsplit ... это означает : Запись 4-го списка (4,4) == означает 2 строки записи 4-го списка, аналогично (1,1,1) означает запись первого списка с тремя строками.

EDIT2: Может кто-нибудь указать мне, где я могу больше узнать о unsplit? Я не могу найти ничего даже в книгах.

EDIT 3: Теперь предположим, что у меня есть эта вспомогательная функция, чтобы предоставить мне индексирование для извлечения из списка:

mat <- matrix(c(1,1,1,1,1),5,4) 
mat[1,1] <- 0.66; mat[1,2] <- 0.33; mat[1,3] <- 0.33 
mat[2,1] <- .66; mat[2,2] <- 0.33; mat[2,3] <- 0.33 
extract <- apply(as.matrix(mat),1,which.max) 

Это предположим, что для работы:

unsplit(models, extract) 

ответ

1

unsplit Безразлично» делайте то, что вы думаете. Чтобы извлечь 1-ю и 4-ю модели, вам просто нужно обычное индексирование квадратной скобки.

models[c("m1", "m4")] 

или

models[c(1, 4)] 
+0

Спасибо, но мне действительно нужно что-то еще не извлекая одну запись списка. См. Edit1-3. спасибо – Maximilian

1

Вы можете использовать rbind и просто получать доступ к элементам с [:

do.call(rbind, models[c("m1", "m4")]) 


    model1 model2 model3 Output Model 
m1.1 0.200 0.099 0.30 0.90 m1 
m1.2 0.350 0.252 0.40 0.90 m1 
m4.1 0.130 0.113 0.18 0.40 m4 
m4.2 0.157 0.110 0.21 0.50 m4 
m4.3 0.058 0.030 0.18 0.46 m4 
+0

Мне действительно нужно нечеткое решение, спасибо. – Maximilian

+1

Зачем вам нужно использовать 'unsplit'? Эта функция предназначена для того, чтобы отменить операцию вызова 'split', и это очень больно использовать. Есть более эффективные способы управления вашим набором данных. –

+0

Я знаю, но у меня есть функция, которая дает мне строки, которые извлекаются из списка. Я должен работать оттуда. См. Редактирование 1-3. – Maximilian

Смежные вопросы