我想知道:是否有一些功能/巧妙的方法来找到覆盖R中一组2d点的给定部分的最小椭圆?随着最小的我的意思是面积最小的椭圆形.
澄清:如果点数很大,我可以使用近似正确的解决方案(因为我猜一个确切的解决方案必须尝试点的子集的所有组合)
这个问题可能听起来像是包含R中给定点百分比的椭圆问题的副本,但问题的表达形式是得到的答案不会产生最小的椭圆.例如,使用给予Ellipse的解决方案,其中包含R中给定点的百分比:
require(car)
x <- runif(6)
y <- runif(6)
dataEllipse(x,y, levels=0.5)
Run Code Online (Sandbox Code Playgroud)
得到的椭圆显然不是包含一半点的最小椭圆,我猜,这是一个覆盖左上角三个点的小椭圆.

所以我正在使用一个使用S3类的R包,如果我可以将其sample作为我的一个类的方法使用,那将是非常好的.但是,base已经声明sample为非S3函数,所以我想知道的是:
重新定义非S3 base功能(例如S3 功能)是不好的风格sample?这可能会让我的包裹用户感到困惑吗?
您可以重新定义sample并保持base功能正常工作的方法是:
sample.default <- base::sample
sample <- function(x, ...) {
UseMethod("sample")
}
# This allows me to define a new sample method for my_special_class
sample.my_special_class <- function(...) {...}
Run Code Online (Sandbox Code Playgroud)
但我不确定的是,这是否会导致任何问题或命名空间问题,例如,在加载其他包时.我也注意到没有多少包重新定义sample,例如,dplyr使用sample_n和igraph使用sample_,我认为可能有一些原因...
我想知道是否有一些聪明的方法可以让客户端获取当前时间和时区,以便在server.RShiny 应用程序的一部分中使用它。如果没有,那么最简单的方法是什么?
我正在运行一项工作pyspark,我曾在其中使用分组聚合 Pandas UDF。这会导致以下(此处为缩写)错误:
org.apache.arrow.vector.util.OversizedAllocationException: Unable to expand the buffer
Run Code Online (Sandbox Code Playgroud)
我相当确定这是因为 Pandas UDF 接收的组之一很大,如果我减少数据集并删除足够的行,我可以毫无问题地运行我的 UDF。但是,我想使用我的原始数据集运行,即使我在具有 192.0 GiB RAM 的机器上运行此 spark 作业,我仍然会遇到相同的错误。(并且 192.0 GiB 应该足以将整个数据集保存在内存中。)
我怎样才能给 spark 足够的内存来运行需要大量内存的分组聚合 Pandas UDF?
例如,是否有一些我错过的火花配置可以为 apache 箭头提供更多内存?
---------------------------------------------------------------------------
Py4JJavaError Traceback (most recent call last)
in
----> 1 device_attack_result.count()
2
3
4
/usr/lib/spark/python/pyspark/sql/dataframe.py in count(self)
520 2
521 """
--> 522 return int(self._jdf.count())
523
524 @ignore_unicode_prefix
/usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py in __call__(self, *args)
1255 answer = self.gateway_client.send_command(command)
1256 return_value = get_return_value(
-> 1257 answer, self.gateway_client, …Run Code Online (Sandbox Code Playgroud) 我一直在努力使用我觉得非常明智的规则来格式化R中的数字.我想要的是指定一些有效数字(比如3),保持显着的零,并保持小数点前的所有数字,一些例子(有3位有效数字):
1.23456 -> "1.23"
12.3456 -> "12.3"
123.456 -> "123"
1234.56 -> "1235"
12345.6 -> "12346"
1.50000 -> "1.50"
1.49999 -> "1.50"
Run Code Online (Sandbox Code Playgroud)
R中是否有一个函数可以进行这种格式化?如果没有,怎么办呢?
我觉得这些是非常合理的格式化规则,但我还没有设法在R中找到以这种方式格式化的函数.据我搜索,这不是许多类似问题的重复,例如这个
编辑:
受到两个好答案的启发,我自己编写了一个函数,我相信它适用于所有情况:
sign_digits <- function(x,d){
s <- format(x,digits=d)
if(grepl("\\.", s) && ! grepl("e", s)) {
n_sign_digits <- nchar(s) -
max( grepl("\\.", s), attr(regexpr("(^[-0.]*)", s), "match.length") )
n_zeros <- max(0, d - n_sign_digits)
s <- paste(s, paste(rep("0", n_zeros), collapse=""), sep="")
}
s
}
Run Code Online (Sandbox Code Playgroud) r ×5
apache-arrow ×1
apache-spark ×1
ellipse ×1
formatting ×1
minimum ×1
oop ×1
pyspark ×1
shiny ×1
timezone ×1