我需要使用R *應用功能,使教程初學者(不使用在第一次重塑或plyr包)訪問數據幀的列名和*應用功能
我嘗試lapply
(因爲我讀apply
是不好的數據幀)一個簡單的功能這個數據幀,我想用命名的列來訪問數據:
fDist <- function(x1,x2,y1,y2) {
return (0.1*((x1 - x2)^2 + (y1-y2)^2)^0.5)
}
data <- read.table(textConnection("X1 Y1 X2 Y2
1 3.5 2.1 4.1 2.9
2 3.1 1.2 0.8 4.3
"))
data$dist <- lapply(data,function(df) {fDist(df$X1 , df$X2 , df$Y1 , df$Y2)})
我有這樣的錯誤$ operator is invalid for atomic vectors
,很可能是因爲數據幀由laply修改? ..有沒有最好的方式來做到這一點與$命名列?
我用@DWin回答解決了我的第一個問題。但我有另一個問題,誤解,與混合數據幀(數字+字符):
在我的新用例,我使用兩個函數來計算距離,因爲我的目標是比較所有其他點之間的距離點。
data2 <- read.table(textConnection("X1 Y1 X2 Y2
1 3.5 2.1 4.1 2.9
2 3.1 1.2 0.8 4.3
"))
data2$char <- c("a","b")
fDist <- function(x1,y1,x2,y2) {
return (0.1*((x1 - x2)^2 + (y1-y2)^2)^0.5)
}
fDist2 <- function(fixedX,fixedY,vec) {
fDist(fixedX,fixedY,vec[['X2']],vec[['Y2']])
}
# works with data (dataframe without character), but not with data2 (dataframe with character)
#ok
data$f_dist <- apply(data, 1, function(df) {fDist2(data[1,]$X1,data[1,]$Y1,df)})
#not ok
data2$f_dist <- apply(data2, 1, function(df) {fDist2(data2[1,]$X1,data2[1,]$Y1,df)})
如果你正在循環一個數據幀的列,這是'lapply'做的,內部函數一次只能看到一列。 – 2012-03-08 21:20:14