使用向量列读取R数据帧(由NetLogo存储)

时间:2017-08-21 15:57:55

标签: r netlogo

我是R的新手,并考虑将其用于我的NetLogo工作。来自Jan Thiele的NetLogo R扩展的一个有用示例是datafile-example.netlogo。它的第三个功能说明了当列包含向量时 保存 数据框到文件时要执行的操作:使用I()将该列标记为类{{1 }}。这是基于该示例的代码。

AsIs

读取 没有示例将数据反馈回R,我无法弄清楚如何操作。

数据框列的单元格是R中的数字向量。

crt 30 [ set xcor random-xcor
         set ycor random-ycor
         set test (list random 10 random 20 random 30 random 40 ) ]
(r:putagentdf "ag" turtles "who" "xcor" "ycor" "test" )
r:eval "ag$test <- I(ag$test)"
r:eval (word "write.table(ag , sep=';', file='" path "')" )

但它们作为矢量文本输入保存在文件中。因此,上面两个是> str(Glob) 'data.frame': 30 obs. of 4 variables: $ who : num 0 1 2 3 4 5 6 7 8 9 ... $ xcor: num -3.201 -11.507 -9.045 -0.242 4.161 ... $ ycor: num 2.82 3.86 -5.14 -8.45 8.96 ... $ test:List of 30 ..$ : num 2 6 29 1 ..$ : num 6 3 17 17 <snip> c(2, 6, 29, 1)

到目前为止,如上面和下面的代码所示,我添加了c(6, 3, 17, 17)sep选项(并尝试使用stringsAsFactors失败)。

colClasses

现在该列的单元格是字符串。

r:eval (word "ag <- read.table(file='" path "', sep=';', stringsAsFactors=FALSE)" )

所以,问题仍然存在:如何将这些数据读回R.另一步是将其恢复到NetLogo。也许没有必要把它读进R? (那为什么要从R中保存?)

对于第二步,有许多专门的> str(agGlob) 'data.frame': 30 obs. of 4 variables: $ who : int 0 1 2 3 4 5 6 7 8 9 ... $ xcor: num -3.201 -11.507 -9.045 -0.242 4.161 ... $ ycor: num 2.82 3.86 -5.14 -8.45 8.96 ... $ test: chr "c(2, 6, 29, 1)" "c(6, 3, 17, 17)" "c(3, 18, 25, 34)" "c(8, 5, 3, 7)" ... 命令,但除了一个vanilla r:put...命令之外别无其他。虽然这可能进一步表明我在这里遗漏了一些东西,但似乎r:get在列表上进行了一些复杂的转换,但在其描述中没有提到矢量,或者

1 个答案:

答案 0 :(得分:1)

这是一个不错的答案,尽管在R扩展程序功能的预期用途中我可能还会遗漏一些东西。

sep=';'write.tableread.table)和stringsAsFactors=FALSE选项外,还需要进行一些后期处理:

let t r:get "lapply(ag$test, function(x) eval(parse(text=x)))"

至少我已经学到了一点R。