2017-01-02 5 views
0

Я должен объединить результаты двух следующих кодов с помощью одной программы -Как объединить два различных результата кода в R в том же выходном файле

Book1 <- read.csv("Book1.csv" , header = FALSE) 
Book2 <- read.csv("Book2.csv" , header = FALSE) 
Book3 <- read.csv("Book3.csv" , header = FALSE) 

sink("output.txt") 
for (i in seq(1,3)) { 
    for (j in seq(2,5)) { 
    if(Book1[i,j]==1 & Book2[i,j]==2 & Book3[i,j]==1) 
     print(1) 
    else 
     print(0) 

    } 
} 
sink() 

Теперь, во втором кодовом все остальное такое же, за исключением состояние внутри if, которое составляет Book1[i,j]==2 & Book2[i,j]==2 & Book3[i,j]==4. Я запускаю эти два кода отдельно и получаю два выходных текстовых файла. Как я могу запустить два кода вместе и получить вывод в том же текстовом файле. Вывод должен быть похож на это в одном текстовой файл без [1] в начале -

0 0 
    0 0 
    0 0 
    0 0 
    0 1 
    0 0 
    0 0 
    1 0 
    0 0 
    0 0 
    0 0 
    0 0 

Я попытался с помощью конкатенации команды, но всегда есть ошибка. И вот результат для deput() -

> dput(head(Book1)) 
structure(list(V1 = c(1L, 2L, 3L, 6L), V2 = c(3L, 2L, 6L, 3L), 
V3 = c(7L, 3L, 5L, 5L), V4 = c(2L, 2L, 3L, 1L), V5 = c(7L, 
1L, 4L, 1L)), .Names = c("V1", "V2", "V3", "V4", "V5"), row.names =c(NA, 4L), class = "data.frame") 


> dput(head(Book2)) 
structure(list(V1 = c(2L, 4L, 1L, 6L), V2 = c(6L, 2L, 6L, 3L), 
V3 = c(3L, 3L, 2L, 5L), V4 = c(2L, 2L, 3L, 2L), V5 = c(7L, 
2L, 4L, 2L)), .Names = c("V1", "V2", "V3", "V4", "V5"), row.names = c(NA, 4L), class = "data.frame") 

> dput(head(Book3)) 
structure(list(V1 = c(1L, 2L, 3L, 6L), V2 = c(3L, 4L, 6L, 3L), 
V3 = c(2L, 3L, 5L, 2L), V4 = c(2L, 2L, 6L, 1L), V5 = c(1L, 
1L, 4L, 1L)), .Names = c("V1", "V2", "V3", "V4", "V5"), row.names = c(NA, 4L), class = "data.frame") 
+0

Просьба представить входные данные, а также. Вы можете [обратиться сюда] (http://stackoverflow.com/help/mcve) для руководства. Кроме того, похоже, что вы хотите, чтобы выходы были объединены по столбцам. Это так? – Aramis7d

+0

@ Aramis7d Да и извините, но ссылка направляет меня на страницу «Страница не найдена». –

+1

Вы могли бы заглянуть в 'cbind()'? объединить все книги вместе –

ответ

3

Напишем векторизованную функцию:

fun <- function(a, b, c) { 
    #calculate the combinations of i and j values 
    #and use them for vectorized subsetting 
    inds <- as.matrix(expand.grid(2:5, 1:3))[, 2:1] 

    #vectorized comparisons 
    as.integer((Book1[inds] == a & 
       Book2[inds] == b & 
       Book3[inds] == c)) 
} 

res <- cbind(fun(1, 2, 1), 
      fun(2, 2, 4)) 

#export the result 
write.table(res, "test.txt", sep = "\t", 
      row.names = FALSE, 
      col.names = FALSE) 
#0 0 
#0 0 
#0 0 
#0 0 
#0 1 
#0 0 
#0 0 
#1 0 
#0 0 
#0 0 
#0 0 
#0 0 
+0

Что делает '[, 2: 1]' do? –

+1

Изучите 'help (" [")'. Он переключает столбцы. – Roland