除非你需要使用函數我會使用向量化的解決方案。首先,我要收拾你的數據幀:
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")
然後,我只需要創建一個新的變量column
和row
:
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
編輯:根據你的評論和編輯過的帖子,你顯然有一個更復雜的功能,我試圖在下面進行矢量化。輸出是針對columns
和row
中的每一個的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
的最好的事情是確定的,例如新列的函數'FUNC =功能(緯度,經度)LAT + long',然後像做'變換(COR,列= func(V2,V4))' –
函數可以返回一個列表:'func = function(lat,long)list(lat + long,lat * long))'和:'transform(cor,newcol1 = func(V2, V4)[[1]],newcol2 = func(V2,V4)[[2]])' –
最好使用vecotrized操作而不是函數......如果你確實需要每行一個函數行, 'apply'。問題是你最小的例子可以是矢量化的,所以你真正要問的是誤導...... –