сохранять данные с неравной длиной, не вводя NA - PullRequest
2 голосов
/ 05 августа 2011

У меня есть вопрос о сохранении кадра данных с неравной длиной. Есть ли способ сохранить таблицу с переменной длиной, не вводя NA или что-то? Вот пример с NA, но это не то, что я хочу сохранить.

x <- list(matrix(c(1,4,3,2), ncol = 2,                   
dimnames = list(c("A","B"), NULL)),            
matrix(c(23,9,4,4,22,54), ncol = 2,                   
dimnames = list(c("C","D","E"), NULL))) 

out <- lapply(x, rownames) 
foo <- function(x, max, repl = NA) {     
if(length(x) == max)         
out <- x     
else {         
out <- rep(repl, max)         
out[seq_along(x)] <- x     
}     
out 
} 
out <- lapply(out, foo, max = max(sapply(out, length))) 
(out <- do.call(rbind, out))

Спасибо

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Я бы создал список и записал в файл, используя write.Существуют и другие возможности (см. Файл справки для ?write).

myl <- list(a = letters[1:10], b = 1:3, c = "kaplah") #create some data

# for every element in the list (`myl`), write that element to a file
# and append if necessary. also, if list element is a character, write
# to as many columns as there are characters.
lapply(X = myl, FUN = function(x) {
    write(x, append = T, file = "test.txt", ncolumns = length(x))
})

Результат -

a b c d e f g h i j
1 2 3
kaplah
2 голосов
/ 05 августа 2011

Фрейм данных должен быть прямоугольным. Если вы хотите хранить данные переменной длины, вам нужно использовать список.

Что в ваших данных заставляет вас сохранять их во фрейме данных?

...