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

Access user-created R objects using the F# Rprovider

我无法引用我在 F# 中使用 R. 符号在 R 端创建的 functions/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

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