我想要一种简单的方法来访问对象的最后值。我已经实现了一个允许类似Python的负索引的函数(count-backwardwards-and-keep-only-those-elements而不是R的remove-those-elements-and-keep-all-other-elements)。有一些问题,但没有人试图这样做:
基本上,我想重新定义[[
和_
,以便可以使用特殊运算符(例如iris[1, ] #first row
iris[-1, ] #everything but first row
iris[_1, ] #last row, equivalent to tail(iris, 1)
iris[, _1] #last column, equivalent to iris[ncol(iris)]
)来使用类似Python的索引。例如,像这样:
+
有可能吗?我知道有可能重新定义,例如extract_last = function(x, margin_1, margin_2, drop = FALSE) {
#check types
if (!(is.vector(x) || is.matrix(x) || is.data.frame(x))) stop("x was an unsupported type (not a vector, matrix or data.frame)!")
#vector
if (is.vector(x)) return(rev(x)[margin_1])
#get dims
x_dims = dim(x)
#make indices
if (missing("margin_1")) {
margin_1 = 1:x_dims[1]
} else {
margin_1 = (x_dims[1] + 1) - margin_1
}
if (missing("margin_2")) {
margin_2 = 1:x_dims[2]
} else {
margin_2 = (x_dims[2] + 1) - margin_2
}
#subset
return(x[margin_1, margin_2, drop = drop])
}
#tests
extract_last(iris, 1) == tail(iris, 1)
extract_last(iris, 10:1) == tail(iris, 10)
extract_last(iris, , 1) == iris[5]
extract_last(iris, , 2:1) == iris[4:5]
extract_last(iris, 10:1, 1) == iris[141:150, 5, drop = FALSE]
引入与其他语言一样的字符连接(see this answer)。
如果不可能,这是我的解决方法功能:
LOAD DATA INFILE