Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:列表的原始序列化/反序列化_R_Mongodb_Serialization_Deserialization_Proto - Fatal编程技术网

R:列表的原始序列化/反序列化

R:列表的原始序列化/反序列化,r,mongodb,serialization,deserialization,proto,R,Mongodb,Serialization,Deserialization,Proto,我希望能够将一些简单的对象存储在持久存储()中,它们的属性可以由其他编程语言的代码操纵。简单地说,我的意思是,它们不会引用其他原型对象。它们的属性将是常见的R类型:列表、向量等。此外,每个对象都可以有一个工厂方法,在给定一个带有属性值的列表的情况下创建它。因此,MongoDB到proto的路径似乎很简单 我不太了解proto的内部结构和R环境链接,不知道是否有一种简单而健壮的方法可以将proto对象的所有属性作为R列表来获取。这可以自动完成吗?或者我应该考虑所有的proto对象实现类似于to_l

我希望能够将一些简单的对象存储在持久存储()中,它们的属性可以由其他编程语言的代码操纵。简单地说,我的意思是,它们不会引用其他原型对象。它们的属性将是常见的R类型:列表、向量等。此外,每个对象都可以有一个工厂方法,在给定一个带有属性值的列表的情况下创建它。因此,MongoDB到proto的路径似乎很简单

我不太了解
proto
的内部结构和R环境链接,不知道是否有一种简单而健壮的方法可以将proto对象的所有属性作为R列表来获取。这可以自动完成吗?或者我应该考虑所有的proto对象实现类似于
to_list()
方法的东西吗

一些示例代码使用
testthat
和我正在开发的一个新的MongoDB驱动程序API来描述我想在这里看到的行为:

test_that("proto persistence", {
  Person <- proto(
    ..Name = 'PersonFactory',
    has_tag = function(., tag) { 
     tag %in% .$tags 
    },
    new = function(., name, tags=c()) {
     .$proto(..Name='Person', name=name, tags=tags)
    } 
  )

  p1 <- Person$new(name='bob', tags=c('friend', 'coworker'))

  coll <- test_db()$collection('test') 
  coll$store('bob', p1)

  result <- coll$find_one(id='bob')
  expect_true(is.list(result))
  expect_true(is.list(result$proto))
  expect_equal(result$proto$name, 'bob')
  expect_equal(result$proto$tags, c('friend', 'coworker'))

  p2 <- coll$load('bob')
  expect_equal(p2$name, 'bob')
  expect_equal(p2$tags, c('friend', 'coworker'))
  expect_true(p2$has_tag('friend'))
})
测试它(“原始持久性”{

Person将问题中的
p1
转换为列表。
L1

L1 <- as.list(p1)

然后,您可以围绕这些基础构建任何您想要的结构。

@G.Grothendieck,proto的维护人员,经常会这样做。我建议您在此期间发布一些代码。@G.Grothendieck感谢您的建议。我正在寻找数据到R列表的逻辑序列化,该列表可以在Mongo中持久化和检查/修改DB.我已经更改了问题的标题和描述,以明确这一点。是否有一种好方法可以从原型对象及其所有父对象等获取数据?@G.Grothendieck我在这里添加了关于我希望满足的期望的代码。如果我通过
$new
工厂方法连接对象创建,似乎这是父母应该正确地连接在一起,对吗?@G.Grothendieck总体思路非常有效。在我的情况下,我更喜欢通过工厂原型使用显式构造函数方法。如果你添加之前的评论作为答案,我会接受。
p1a <- as.proto(L1, parent = Person)