R и openxls, получая ошибку при попытке создать несколько xlsx - PullRequest
0 голосов
/ 27 марта 2019

я пытаюсь создать функцию, которая принимает два файла, скажем, x и y, и возвращает книгу xls, функция создаст несколько листов с именами, выбранными из файла x, x будет выглядеть следующим образом

sol
   Orden
1   Z169
2   Z170
3   Z175

Теперь, с созданными листами, он будет записывать данные, взятые из второго (у) файла, у файл выглядит так

base   
     Orden Dependencia
1    Z169    TRæNSITO
2    Z170    TRæNSITO
3    Z171    TRæNSITO
4    Z172    TRæNSITO
5    Z173    POLICIA
6    Z174    TRæNSITO
7    Z175    POLICIA

, насколько я понимаю, яиметь этот код (в нем минимальная, полная, проверяемая форма, или это не так?)

autoform <- function(x,y){

## create wordbook
wb <- createWorkbook()

## create work sheets   
for (i in 1:length(x[,1])){
    if(isTRUE(x[i,1] %in% y[,1])){  
        addWorksheet(wb, x[i,1])

##editing the sheet 
        writeData(wb,  x[i,1], y[i,2], startCol = 8, startRow = 6,rowNames = TRUE )
        }
    }

## save file

saveWorkbook(wb, "marth/javi/supertest.xlsx", overwrite = TRUE)
}

, когда я пытаюсь использовать автоформу (x, y), я получаю эту ошибку:

> autoform(sol, base)
Error in nchar(sheetName) : 'nchar()' requires a character vector

Я прыгал, кто-то может объяснить мне, почему эта ошибка и как ее решить, спасибо вам за чтение

1 Ответ

0 голосов
/ 27 марта 2019

заправил все для чтения, я сделал это сам, проблема, я думаю, заключалась в том, что индекс i не совпадает с тем, что мне нужно в переменной y, поэтому мне нужен был другой для цикла, это код, работающий

autoform <- function(x,y){

    ## create wordbook
    wb <- createWorkbook()
    x<-as.matrix(x)
     y<-as.matrix(y)
    ## create work sheets   
    for (i in 1:length(x[,1])){
        if(isTRUE(x[i,1] %in% y[,1])){  
            addWorksheet(wb, x[i,1])
            for (j in 1:length(y[,1])){
            if(isTRUE(x[i,1] == y[j,1])){
    ##editing the sheet 
            writeData(wb, x[i,1], y[j,2], startCol = 8, startRow = 6,rowNames = TRUE )
            }
        }
}
}
    ## save file

    saveWorkbook(wb, "marth/javi/supertest.xlsx", overwrite = TRUE)
    }
...