我是R的新手,並考慮在我的NetLogo工作中使用它。 Jan Thiele的NetLogo R擴展的一個有用示例是datafile-example.netlogo
。它的第三個功能說明了當一列包含向量時將數據幀保存爲文件時要執行的操作:使用I()
將該列標記爲類AsIs
。這裏是基於該例子的代碼。讀取帶有矢量列的R數據幀(由NetLogo存儲)
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 "')")
沒有爲讀書沒有例如數據返回到R,我想不出如何做到這一點。
數據幀的列的單元是數值向量在R.
> 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)")
現在該列的單元格是字符串。
> 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)" ...
因此,問題仍然存在:如何將這些數據讀回R.第二步將返回到NetLogo。也許沒有必要將它讀入R? (然後爲什麼從R中保存它)
對於第二步,有一系列專門的命令r:put...
,但是除了命令vanilla r:get
之外沒有其他任何東西。雖然這可能進一步表明我在這裏缺少某些東西,但看起來r:get
在列表上做了一些複雜的轉換,但在其描述中也沒有提到向量。
做得好的搞清楚。我的兩個美分 - 你的問題「那麼爲什麼要從R保存?」我也會問。我認爲您使用的「數據文件示例」主要演示如何在完成您所需的任務後輸出分析/結果/數據。我期望通常你會在R環境中完成你的工作,而不是寫入文件,再次加載等。 –
True;我期待着學習RNetLogo。我們還留下了第二級問題:爲什麼要將矢量作爲數據框中的元素存儲?再一次,我感覺答案是,我仍然很早就使用R作爲NetLogo的一部分。 – Chris