【发布时间】:2016-04-16 12:05:28
【问题描述】:
我正在为看似简单的事情而苦苦挣扎;但我已经坚持了很长一段时间了。
我有一个很长的 data.frame,但这里有一个可以代表它的示例。
my.dataframe<-data.frame(PointA.X=sample(100,4))
my.dataframe$PointA.Y<-sample(100,4)
my.dataframe$PointB.X<-sample(100,4)
my.dataframe$PointB.Y<-sample(100,4)
PointA.X PointA.Y PointB.X PointB.Y
1 93 98 46 45
2 58 3 80 89
3 61 64 17 14
4 56 46 65 23
我正在寻找一个函数,该函数将使用两个参数,从中会出现更多参数。
MyFunction<-function(Start, End){
XStart <- get(as.character(paste0("Mydataframe$" , Start , ".X")))
XEnd <- get(as.character(paste0("Mydataframe$" , End , ".X")))
YStart <- get(as.character(paste0("Mydataframe$" , Start , ".Y")))
YEnd <- get(as.character(paste0("Mydataframe$" , End , ".Y" )))
sqrt(((XStart - XEnd) ^ 2 + (YStart - YEnd) ^ 2))
} # End of My Function
在这种情况下,我将定义 StartPoint 和 EndPoint 来计算它们之间的线段长度。 MyFunction("PointA", "PointB")
据我了解
MyFunction("PointA", "PointB")
以下
as.character(paste0("Mydataframe$" , Start , ".X"))
返回
"Mydataframe$PointA.X"
这是我的数据框中的有效列 使用 get() 是在寻找一个对象,而不是寻找实际的数据。
这就是我卡住的地方。是否有返回我正在寻找的值的功能?
提前谢谢大家
【问题讨论】:
-
没错。
get()寻找对象。"Mydataframe$PointA.X"不是对象。Mydataframe是一个对象,PointA.X 是该对象中的一列。但是"Mydataframe$PointA.X"不是对象的名称,这是get()想要的参数。 .但是你为什么要这样做呢?您可以使用Mydataframe[[paste0(Start, ".X")]]等。 -
嗨,理查德,感谢您的回复。这是个好主意。我试图缩短我的代码,因为我有 100 列,我会计算它们的长度 2 乘 2 等等。
标签: r character data-retrieval