从 R 中的字符文件转换为 .libfm 格式

Convert from character file in R to .libfm format

我在 R 中有一个稀疏矩阵。使用包 libFMexe 我可以将矩阵转换为 libFM 的正确格式。我得到

head(libFMmat)
[1] "1 0:1 5000:1 33736:1 33737:1 33738:1 33739:1 33740:1 33741:1 
33742:1 33743:1 33744:1 33745:1 33746:1 33747:1"
[2] "1 0:1 5001:1 33735:1 33737:1 33738:1 33739:1 33740:1 33741:1 
33742:1 33743:1 33744:1 33745:1 33746:1 33747:1"
[3] "1 0:1 5002:1 33735:1 33736:1 33738:1 33739:1 33740:1 33741:1 
33742:1 33743:1 33744:1 33745:1 33746:1 33747:1"
[4] "1 0:1 5003:1 33735:1 33736:1 33737:1 33739:1 33740:1 33741:1 
33742:1 33743:1 33744:1 33745:1 33746:1 33747:1"
[5] "1 0:1 5004:1 33735:1 33736:1 33737:1 33738:1 33740:1 33741:1 
33742:1 33743:1 33744:1 33745:1 33746:1 33747:1"
[6] "1 0:1 5005:1 33735:1 33736:1 33737:1 33738:1 33739:1 33741:1 
33742:1 33743:1 33744:1 33745:1 33746:1 33747:1"

根据我的数据和我想要的格式,这是正确的。现在我想在此数据上使用 libFM。

首先我尝试实际使用

libFM(libFMmat_train, libFMmat_test)

但我得到

sh: libFM: command not found
Error in system(libfm_exe, intern = TRUE) : error in running command

所以现在我正尝试在我的终端中进行操作。我用

save(libFMmat_train, file= "/.../libFMmat_train.libfm")

但是当我 运行 libFM 处理这个数据时,我得到

Loading train...    
has x = 0
has xt = 1

ERROR: cannot parse line "??=???U??;p;?x"?k??Kb??X??? ?ƭV08?P0r?
@ոS.$%F$JZ(i??) I73?f?D4?qG?lG????[????5?n??<??{??ֵ?u]????ӿ????'>???o???
w????c?ϻO??O??????_~??????W?̡?,???:??}???|???7~??????Q/?C?(???̣ƴ>K?a?
ϔ???)?g?u???a?????ߕ9??}
            ??;?????qL??>???s???????_l???_??\Kܿ???s5?i?[cl??1?_W???5?
>???u???ge__(??ʈQ????c?y?}?u?????f??b֟co?{ZJs???h=?V?{??L?????ܟ?<????j??
q??_??\R,?S????^???ܿ>??????}????^rߟ???Q?:?^_???K\_??{???q??????3??????
R.a??^uaIXS?_X???1?bϽ??????????~o}??^????????N~t}a?:?iؿ?k???Ӿ???s??Y???
{J)v=?0????K?z?m
}???:???H9??,|?s}??????5??<?cZ?Y???????om???=???Ǖί?1???cLC????+k!?9???
ޖJ~[|oW??"?ף?u!?Ԧ????u????h?Xߐs?" at character 

所以我的问题是 - 如何以正确的格式将 R 字符文件保存为 .libfm 文件以便我可以使用 libFM?

我自己解决了,文件已经是正确的文本格式了,不需要转成.libfm格式。所以我只是使用(在另一个 Whosebug 线程中找到)

将我的字符向量 libFMmat 转换为 libFM 格式
fileConn <- file("output.txt")
writeLines(libFMmat, fileConn)
close(fileConn)

获取可与 libFM 一起使用的 .txt 文件。