使用F#Rprovider访问用户创建的R对象

时间:2015-03-16 10:25:08

标签: r f# type-providers

我无法在F#中使用R.表示法引用我在R端创建的函数/ data.frames / variables。这是如何实现的?

例如,在下面的代码中,我希望能够通过intellisense引用symbolsf1

open RProvider
open RDotNet

R.eval(R.parse(text="
    require(datasets);
    volcanoList <- unlist(as.list(volcano));
    volcanoMean <- mean(volcanoList);
    symbols <- c('volcano', 'volcanoList', 'volcanoMean');
    f1 <- function(y) y+1
    dfs <- data.frame(a = symbols)
"))
R.eval(R.parse(text="symbols"))
R.symbols // doesn't work
R.f1 // doesn't work
R.dfs // doesn't work

1 个答案:

答案 0 :(得分:1)

R类型提供程序当前不扫描环境中用户创建的变量(这样做的一个问题是它们在您运行代码之前并不存在,因此如果您刚刚打开它,就会看到文件中的错误)。

你可以使用RData type获得最接近这样的东西。这使您可以以静态类型的方式读取RData文件。因此,如果您在R代码的末尾调用save

R.eval(R.parse(text="""
    require(datasets);
    volcanoList <- unlist(as.list(volcano));
    volcanoMean <- mean(volcanoList);
    symbols <- c('volcano', 'volcanoList', 'volcanoMean');
    save(list=symbols, file="C:/temp/image.rdata")
"""))

然后,您可以通过良好的自动完成支持读取已保存的文件(我不确定您是否需要在保存文件时明确指定符号列表,或者您是否可以保存整个环境):

let data = new RData<"C:/temp/image.rdata">()
data.volcano
data.volcanoList
data.volcanoMean