簡體   English   中英

Rpy2:從python設置R公式

[英]Rpy2: set a R formulat from python

我對R語法公式有點困惑

我用Rpy2創建了以下python函數:

objects.r('''

  project_var <- function(grid,points) {
      coordinates(points) = ~X + Y
      gridded(grid) = ~X+Y
      grid = idw(Z~1, points,grid)
      grid <- as.data.frame(grid)
      return(grid)
   }
''')

然后我導入

project_var = robjects.globalenv['project_var']

然后我稱之為:

test = project_var(model,points_top)

它按預期工作!

我想通過我的函數的參數設置“ Z”,如下所示:

      project_var <- function(grid,points,feature_name) {
...
          grid = idw(feature_name~1, points,grid)

我的問題 :

idw(feature_name~1, points,grid)

我不太了解這一行以及真正的功能名稱(因為此時它不是字符串,也不是已知變量,而是作為公式的列的名稱)。

信息idw來自gstat庫...我不知道R ...這是doc:

idw.locations(公式,位置,數據,新數據,nmax = Inf,nmin = 0,omax = 0,maxdist = Inf,block,na.action = na.pass,idp = 2.0,debug.level = 1) https: //cran.r-project.org/web/packages/gstat/gstat.pdf

那么我應該在python端為feature_name放置什么呢? 或者如何在R中構建它,以便將字符串feature_name轉換為可以工作的東西? 任何幫助將不勝感激。

謝謝您到目前為止的閱讀。

我不太了解這一行以及真正的功能名稱(因為此時它不是字符串,也不是已知變量,而是列的名稱)。

R與Python有所不同,R是函數調用中的表達式(此處idw(Z~1, points,grid) )僅在函數內求值,而未求值的表達式本身可用於函數體內的代碼。

除此之外, Z~1本身就是一個特殊的東西:它是一個R公式。 您可以在R中寫fml <- Z ~ 1 ,而對象fml將是一個“公式”。 公式的構造函數在某種程度上是隱藏的,因為<something> ~ <something>被認為是R中的語言構造,但實際上您具有諸如build_formula(<left_side_expression>, <right_side_expression>) 您可以在R fml <- get("~")(Z, 1)進行嘗試,看看確實發生了這種情況。

好的,只需要使用as.formula將字符串轉換為公式即可:-)

idw(as.formula(feature_name), points,grid)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM