2015-02-26 4 views
0

У меня есть простой data.frame ф.р.применяется функция jsonlite R

a b c  d 
1 5 A  E 
2 4 B  F 
3 3 C  G 
4 2 D  H 
5 1 E  J 

Скажем, я хочу, чтобы записать его в формате JSON:

jsonlite::toJSON(df[1,]) 

возвращается:

[{"a":1,"b":10,"c":"A","d":"J"}] 

Однако ,

apply(df[1,], 1, jsonlite::toJSON) 

возвращается:

"[\"1\",\"10\",\"A\",\"J\"]" 

Где имена моих переменных идут? Как я могу вернуть их?

Спасибо,

Carlos

ответ

0

help(apply) говорит вам:

If ‘X’ is not an array but an object of a class with a non-null 
‘dim’ value (such as a data frame), ‘apply’ attempts to coerce it 
to an array via ‘as.matrix’ if it is two-dimensional (e.g., a data 
frame) or via ‘as.array’. 

так toJSON видит вектор символов для каждой строки, что был кадр данных.

Решение заключается в разделении кадра данных и использовать lapply:

> lapply(split(df, 1:nrow(df)), jsonlite::toJSON) 
$`1` 
[{"a":1,"b":5,"c":"A","d":"E"}] 
$`2` 
[{"a":2,"b":4,"c":"B","d":"F"}] 
$`3` 
[{"a":3,"b":3,"c":"C","d":"G"}] 
$`4` 
[{"a":4,"b":2,"c":"D","d":"H"}] 
$`5` 
[{"a":5,"b":1,"c":"E","d":"I"}] 
Смежные вопросы