繁体   English   中英

从Python运行R脚本

[英]Run R script from Python

我想从Python脚本运行R脚本。 在不同的坐标系中投影lat lon坐标需要R脚本。 我考虑过两种选择。 在第一个选项中,我想将lat和lon坐标解析为R脚本,如下所示。 最后我希望R脚本将x和y返回给python脚本,但我无法弄清楚如何做到这一点。

project<-function(lat,lon){

library(sp)
library(rgdal)

xy <- cbind(x = lon, y = lat)
S <- SpatialPoints(xy)
proj4string(S) <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
Snew <- spTransform(S, CRS("+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs"))
x <- coordinates(Snew)[1]
y <- coordinates(Snew)[2]

return(x,y)
}

对于我的第二个选项,我考虑使用底部的R脚本,其中已经有lat和lon。 我尝试使用subprocess.Popen('Rscript project.r',shell = True)运行此命令。(等)但是这似乎不起作用。 它不会写一个xy.txt文件。 但是,如果我从cmd行运行它,则R脚本可以完成这项工作。 谁可以帮我解决这两个选项之一?

library(sp)
library(rgdal)

lat <- 52.29999924
lon <- 4.76999998

xy <- cbind(x = lon, y = lat)
S <- SpatialPoints(xy)
proj4string(S) <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
Snew <- spTransform(S, CRS("+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs"))
x <- coordinates(Snew)[1]
y <- coordinates(Snew)[2]

cat(x, file="xy.txt",sep="")
cat(y,file="xy.txt",append=TRUE)

在我看来你几乎就在那里,一些评论:

  • x <- coordinates(Snew)[1]选择第一项,使用x <- coordinates(Snew)[,1]得到整个向量。 这假定您传递latlon向量,而不是单个值。 这里没有理由我们不允许传递lat lon向量。

  • return(x,y)无效,R不支持返回多个对象。 return(cbind(x,y)) ,只需return(cbind(x,y))

  • 在函数内部我会使用require

关于从Python运行代码,我看看Rpy 这允许您从Python中调用R代码。 Rpy为你来回传递R对象做了很多艰苦的工作,所以在这种情况下这是一个不错的选择。

我将在Rpy中采用的方法是将project放在.R文件中, source文件和调用project

对于您的第一个解决方案 - 让R将坐标输出到控制台(使用print或cat或R中的任何内容),然后在Python中捕获它(请参阅此处: 从Python运行shell命令并捕获输出

这将为你提供一个包含teh lat / lon coords的字符串,你只需要使用适当的Python函数将它们解析出来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM