如何在文本文件中循环函数?

时间:2015-05-12 13:31:24

标签: r loops

我有一个我想要使用的功能,但输入来自文本文件。

以下是Fun:

myfun <- function(latitude,longitude) {
   column =latitude*5
   row    =longitude*3
  return(c(column, row))
         }

现在我有一个包含我的功能信息的文本文件。

cor=read.table("C:\\Data\\AMS.txt", sep="")
head(cor)
  V1       V2  V3     V4    V5   V6
1 lat      13 lon     2   Site:   As
2 lat      14 lon     3   Site:   Ad

例如:

所需的输出
 lat       lon      column  row  site    
 13         2        ?       ?    As

我可以手动执行此操作,但由于我有很多,最好让R执行此操作。任何提示都表示赞赏

2 个答案:

答案 0 :(得分:2)

尝试:

data.frame(lat=DF$V2, lon=DF$V4, column=DF$V2*5, row=DF$V4*3, site=DF$V6)

无需清洁。

数据

DF <- read.table(text="  V1       V2  V3     V4    V5   V6
1 lat      13 lon     2   Site:   As
2 lat      14 lon     3   Site:   Ad", header=T)

> DF1 <- data.frame(lat=DF$V2, lon=DF$V4, column=DF$V2*5, row=DF$V4*3, site=DF$V6)
> DF1
  lat lon column row site
1  13   2     65   6   As
2  14   3     70   9   Ad

答案 1 :(得分:1)

除非你需要使用一个函数,否则我会使用矢量化解决方案。首先,我整理你的数据框:

cor <- read.table("C:\\Data\\AMS.txt", sep="")  # note <- not =
require("dplyr")
cor <- select(cor, -V1)
cor <- select(cor, -V3)
cor <- select(cor, -V5)
colnames(cor) <- c("lat", "long", "site")

然后,我只需为columnrow创建一个新变量:

cor$column <- cor$lat * 5
cor$row    <- cor$long * 3

产量:

cor
#   lat long site column row
# 1  13    2   As     65   6
# 2  14    3   Ad     70   9

编辑:根据您的评论和编辑的帖子,您显然有一个更复杂的功能,我试图在下面进行矢量化。输出是针对columnsrow中每个项目的5个项目的向量,因此希望这是您预期的行为。

kR  = 6371.228  # recommend constants start with 'k'
kC  = 25.067525
kNc = 1383
kNl = 586
kR0 = (kNc - 1) / 2
kS0 = (kNl - 1) / 2
kDeg2rad_cte = pi/180

cor$lamda <- cor$lon * kDeg2rad_cte
cor$phi   <- cor$lat * kDeg2rad_cte

column <- round(kR0 + (kR / kC) %*% cor$lamda * cos(pi / 6)) + 1
row    <- 586 - round(kS0 - (kR / kC) %*% sin(cor$phi) / cos(pi / 6))

column <- seq(min(column), max(column), by=1) 
row    <- seq(min(row), max(row), by=1) 

column
# [1] 700 701 702 703 704

row
# [1] 360 361 362 363 364