Кадр данных в R для преобразования в последовательность объектов JSON

Я задавал тот же вопрос после редактирования 2 раз предыдущего вопроса, который я написал. Я прошу прощения за плохое использование этого сайта. Я пометил его для удаления и выкладываю здесь новый вопрос. Пожалуйста, посмотрите на это.

Я в основном работаю над кодом системы рекомендации. Вывод должен быть преобразован в последовательность объектов JSON. У меня есть матрица, в которой есть справочная таблица для каждого идентификатора элемента со списком ближайших элементов, с которыми она связана, и показателями сходства, связанными с их комбинациями.

Позвольте мне объяснить на примере.

Предположим, у меня есть матрица. В приведенном ниже примере пункт 1 аналогичен пунктам 22 и 23 с показателями сходства 0,8 и 0,5 соответственно. И остальные строки следуют той же структуре.

X1 X2 X3 X4 X5 
1 22 23  0.8 0.5
34 4 87  0.4 0.4
23 7 92  0.6 0.5

Мне нужна структура JSON для каждого элемента (каждый X1 для каждой строки) вместе с рекомендованными элементами и показателями сходства для каждой комбинации как отдельной сущности JSON, и это делается последовательно. Я не хочу весь объект JSON, содержащий эти отдельные. Предположим, что есть еще одна сущность, называемая "coid", которая будет предоставлена ​​в качестве входных данных для кода. Я предполагаю, что это XYZ, и он одинаков для всех строк.

{ "_id" : { "coid" : "XYZ", "iid" : "1"}, "items" : [ { "item" : "22", "score" : 0.8},{ "item": "23", "score" : 0.5}] }
{ "_id" : { "coid" : "XYZ", "iid" : "34"},"items" : [ { "item" : "4", "score" : 0.4},{ "item": "87", "score" : 0.4}] }
{ "_id" : { "coid" : "XYZ", "iid" : "23"},"items" : [ { "item" : "7", "score" : 0.6},{ "item": "92", "score" : 0.5}] }

Как и в предыдущем примере, каждая сущность является допустимой структурой / объектом JSON, но они не объединяются в отдельный объект JSON в целом.

Я ценю всю помощь, проделанную для предыдущего вопроса, но каким-то образом я чувствую, что это новое изменение, которое я здесь имею, не связано с ними, потому что, в конце концов, если вы делаете toJSON(некоторую сущность), то он преобразует все это в один объект JSON, Я не хочу этого Я хочу, чтобы отдельные из них были записаны в файл.

Я очень сожалею о своем невежестве и неудобствах. Пожалуйста помоги. Благодарю.

1 ответ

library(rjson)
## Your matrix
mat <- matrix(c(1,34,23,
               22, 4, 7,
               23,87,92,
               0.8, 0.4, 0.6,
               0.5, 0.4, 0.5), byrow=FALSE, nrow=3)

Я использую функцию (не очень интересное название makejson), который берет строку матрицы и возвращает объект JSON. Это делает два list объекты, _id а также itemsи объединяет их в объект JSON

makejson <- function(x, coid="ABC") {
    `_id` <- list(coid = coid, iid=x[1])
    nitem <- (length(x) - 1) / 2 # Number of items
    items <- list()
    for(i in seq(1, nitem)) {
        items[[i]] <- list(item = x[i + 1], score = x[i + 1 + nitem])
    }
    toJSON(list(`_id`=`_id`, items=items))
}

Затем с помощью apply (или for цикл) Я использую функцию для каждой строки матрицы.

res <- apply(mat, 1, makejson, coid="XYZ")
cat(res, sep = "\n")
## {"_id":{"coid":"XYZ","iid":1},"items":[{"item":22,"score":0.8},{"item":23,"score":0.5}]}
## {"_id":{"coid":"XYZ","iid":34},"items":[{"item":4,"score":0.4},{"item":87,"score":0.4}]}
## {"_id":{"coid":"XYZ","iid":23},"items":[{"item":7,"score":0.6},{"item":92,"score":0.5}]}

Результат может быть сохранен в файл с cat указав file аргумент.

## cat(res, sep="\n", file="out.json")

Есть небольшая разница в вашем выводе и моем, числа в кавычках ("). Если вы хотите, чтобы это было так, mat должен быть характер.

## mat <- matrix(as.character(c(1,34,23, ...

Надеюсь, поможет,

Алекс

Другие вопросы по тегам