Кадр данных в 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, ...
Надеюсь, поможет,
Алекс