簡體   English   中英

在 R 中使用“網狀”function 運行連續 Python 腳本時出現問題

[英]Problem running successive Python scripts using 'Reticulate' function in R

我在調用網狀 function 的單個 R 腳本中運行兩個連續的 python 腳本時遇到問題。 當我單獨運行它們時,它工作得很好。 我錯過了什么嗎? 我是否需要某種 function 在執行第二個之前關閉前一個 py_run ? 請注意,我正在使用 ArcGIS 'arcpy' 工具。

這是一個例子。 如果我在 Rstudio session 中運行它:

        use_python("C:/Python27/ArcGISx6410.7/python.exe", required = T)
        import("arcpy")
        import("os")
        import("glob")
        import("re")
        import("math")

        pythonRun1 = paste0("modelName = ", "'", modelName, "'")

        py_run_string(pythonRun1)
        py_run_file("C:/GIS/Bathymetry_UdeM/Radial_Linear_Mean_R/Output/Workflow/InterpolateResults.py")

然后在第二個 Rstudio session 中:

        use_python("C:/Python27/ArcGISx6410.7/python.exe", required = T)
        import("arcpy")
        import("arcpy.sa")
        import("os")
        import("glob")
        import("re")
        import("math")

        pythonRun2 = paste0("modelName = ", "'", modelName, "'")

        py_run_string(pythonRun2)
        py_run_file("C:/GIS/Bathymetry_UdeM/Radial_Linear_Mean_R/Output/Workflow/FocalMean.py")

它完美地工作。 但是當我試圖連續執行這兩個代碼塊時:

        use_python("C:/Python27/ArcGISx6410.7/python.exe", required = T)
        import("arcpy")
        import("os")
        import("glob")
        import("re")
        import("math")

        pythonRun1 = paste0("modelName = ", "'", modelName, "'")

        py_run_string(pythonRun1)
        py_run_file("C:/GIS/Bathymetry_UdeM/Radial_Linear_Mean_R/Output/Workflow/InterpolateResults.py")

        #########################################################################################################

        use_python("C:/Python27/ArcGISx6410.7/python.exe", required = T)
        import("arcpy")
        import("arcpy.sa")
        import("os")
        import("glob")
        import("re")
        import("math")

        pythonRun2 = paste0("modelName = ", "'", modelName, "'")

        py_run_string(pythonRun2)
        py_run_file("C:/GIS/Bathymetry_UdeM/Radial_Linear_Mean_R/Output/Workflow/FocalMean.py")

我得到 noData 作為我的最終 output。 從技術上講,腳本的第二部分不會回調任何錯誤,但代碼不會執行它應該執行的操作。

有沒有人知道什么可能導致這兩種方法之間的差異(即,單獨和連續的 py_run 執行)?

感謝大家!

嘗試構建一個MRWE 如果無法運行代碼,很難回答這樣的問題。 不過,這里有幾個故障排除的起點。

  1. 我不建議運行reticulate::use_python兩次。 據我了解,一旦 Python 解釋器嵌入到 R session 中,它就無法更改,所以當這被稱為最壞的時候,它可能會導致第二次出現問題。

  2. 您沒有顯示任何值綁定到model_name的代碼,是否應該在兩個代碼塊之間進行更改?

  3. 是否有任何 state 在影響第二個代碼塊評估的第一個代碼塊中被修改? 例如,如果在第一個代碼塊中創建了一個變量,該變量將遮蔽在第二個代碼塊中使用的變量。

  4. 嘗試直接在 Python 中運行類似的代碼,並確保其正常工作。 如果沒有,那么在該環境中調試會更容易。

祝你好運!

暫無
暫無

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

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