小编Jer*_*oen的帖子

使用是否有任何缺点:text/plain; 字符集= "UTF-8"

我的网络服务器提供的内容在95%的时间内只是简单的ascii.但是在极少数情况下,内容包含一些德语非ascii字符.

现在,我可以content-type通过检测内容是否包含任何非ascii字符来设置响应头,或者我可以始终设置响应头:

Content-Type: text/plain; charset=UTF-8
Run Code Online (Sandbox Code Playgroud)

做后者有什么不利之处吗?

ascii content-type http utf-8 http-headers

17
推荐指数
3
解决办法
2万
查看次数

我们应该在HTTP/2中多路复用多少个并发请求

很长一段时间,浏览器每个主机最多使用6个并发HTTP 1.1连接来从网页中检索资产.远远超出这个黄金标准被认为是DOS并让你被禁止服务器.

现在有HTTP/2,我们可以在一个连接上复用许多HTTP请求.我们是否仍应对我们在连接上复用的并发请求数量使用类似的限制,以防止服务器过载?或者在单个连接上复用更多请求是否有害?

任何人都知道浏览器使用每台主机和HTTP/2服务器的每个连接限制了什么?

browser google-chrome http2 nghttp2

16
推荐指数
1
解决办法
6462
查看次数

do.call与"::"结合使用

我大量使用'do.call'来生成函数调用.例如:

myfun <- "rnorm";
myargs <- list(n=10, mean=5);
do.call(myfun, myargs);
Run Code Online (Sandbox Code Playgroud)

但是,有时我想从某个包中明确调用一个函数.与例如类似stats::rnorm(n=10, mean=5).有没有什么方法可以使用do.call,或者创建一个与do.call类似的函数来使其工作:

myfun <- "stats::rnorm";
myargs <- list(n=10, mean=5);
do.call(myfun, myargs);
Run Code Online (Sandbox Code Playgroud)

r

14
推荐指数
2
解决办法
1791
查看次数

经度/纬度点之间的最大距离

我有一组lng/lat坐标.计算集合中任意两点之间最大距离的有效方法是什么("最大直径",如果你愿意的话)?

一种天真的方法是使用Haversine公式来计算每个2点之间的距离并获得最大值,但这显然不能很好地扩展.

编辑:这些点位于一个足够小的区域,用于测量携带移动设备的人在一天内活动的区域.

algorithm r geospatial latitude-longitude cran

14
推荐指数
2
解决办法
4504
查看次数

R中优化的算术方法

openssl包实现了一个bignum类,该类具有相应的算术和比较方法,可以对任意大小的整数执行计算.

在密码学中,模块化指数 有一个共同的特殊情况,x^p %% m例如rsa使用.对于大型p计算,计算x^p是不可行的,但x^p %% m可以有效地计算OpenSSL实现的计算BN_mod_exp().

R是否提供了实现^.bignum%%.bignum方法的任何机制, 以便在评估时x^y %% z我们可以调用这种特殊情况而不是实际计算x^p

r

14
推荐指数
1
解决办法
317
查看次数

JSON REST/RPC接口的IDL

我们正在设计一个相当复杂的REST API,其中大多数I/O都是具有特定结构的JSON编码对象.我们发现的一个挑战是以这样一种方式记录API,使客户端更容易发布正确的输入和过程输出.由于输入和输出的数据都需要相当复杂的JSON对象,因此客户端开发人员经常会引入与I/O对象结构相关的错误.

现在有了所有的JSON Web API,我希望得到一个通用的解决方案,但我很难找到一个.我研究了json-schema这是一个json验证模式,但是IETF草案和实现似乎都相当不成熟(尽管它们已经存在了一段时间,这不是一个好兆头).

Protocol BuffersApache Avro提供了一种稍微不同的方法,其中模式不用于验证,但实际上需要对消息进行编码/解码.在这两个中,Avro似乎有相当有限的文档和实现.ProtoBuf似乎更好,但我不确定这是否真的适合在浏览器中使用来调用JSON api?

现在我开始怀疑我是否从正确的角度看待这个问题.还有其他方法可以使我的API更强大吗?或者是JSON REST/RPC API的正式描述是否会破坏使用JSON的目的?

编辑:在这个主题后6个月,我们发现了mongoose,这非常接近我们所期待的.

rest rpc json idl protocol-buffers

13
推荐指数
1
解决办法
5711
查看次数

在单个函数中组合S4和S3方法

定义一个应该具有S3和S4类实现的通用函数的好方法是什么?我一直在使用这样的东西:

setGeneric("myfun", function(x, ...){  
    standardGeneric("myfun");
});

setMethod("myfun", "ANY", function(x, ...) {
    if(!isS4(x)) {
        return(UseMethod("myfun"));
    }
    stop("No implementation found for class: ", class(x));
});
Run Code Online (Sandbox Code Playgroud)

这成功了:

myfun.bar <- function(x, ...){
    return("Object of class bar successfully dispatched.");
}
object <- structure(123, class=c("foo", "bar"));
myfun(object)
Run Code Online (Sandbox Code Playgroud)

是否有一种"原生"方式来实现这一目标?我知道我们可以使用S3类定义S4方法setOldClass,但是这样我们就失去了S3方法调度,以防对象有多个类.例如(在一个干净的会议中):

setGeneric("myfun", function(x, ...){  
    standardGeneric("myfun");
});

setOldClass("bar")
setMethod("myfun", "bar", function(x, ...){
    return("Object of class bar successfully dispatched.");
});

object <- structure(123, class=c("foo", "bar"));
myfun(object)
Run Code Online (Sandbox Code Playgroud)

这会失败,因为object在这种情况下bar,第二类被忽略.我们可以通过在foo和之间定义正式的S4继承来解决这个问题bar,但是对于我的应用程序,我宁愿myfun.bar在一个类的S3对象上开箱即用bar. …

r cran s4

13
推荐指数
1
解决办法
1326
查看次数

为什么内存地址以0x开头?

可能重复:
为什么十六进制前缀为0x?

内存地址通常标记为前缀为十六进制值0x.例如:

> new.env()
<environment: 0x21d36e0>
Run Code Online (Sandbox Code Playgroud)

0x部分是什么意思吗?这种符号来自哪里?是否有其他价值而不是0x

c c++ linux memory operating-system

12
推荐指数
2
解决办法
1万
查看次数

卸载rJava和/或重新启动JVM

我想rJava结合使用,mcparallel但显然JVM不能分叉.因此,需要为每个子进程启动单独的JVM实例,例如:

library(rJava)
library(parallel)
myfile <-  system.file("tests", "test_import.xlsx", package = "xlsx")

#This works:
mccollect(mcparallel({
  #Automatically initiates JVM in child
  xlsx::read.xlsx(myfile, 1)
}))
Run Code Online (Sandbox Code Playgroud)

但是我的问题是JVM已经在(主)父进程中启动了.这使得无法rJava在子进程中使用:

#init JVM in parent
.jinit()

#Doesn't work anymore
mccollect(mcparallel({
  xlsx::read.xlsx(myfile, 1)
}))
Run Code Online (Sandbox Code Playgroud)

所以我真正需要的是在子进程中关闭/终止和重启JVM的方法.只是 detach("package:rJava", unload = TRUE)似乎没有这样的伎俩.该force.init参数似乎不会导致重启:

#Also doesn't work:
.jinit()
mccollect(mcparallel({
  .jinit(force.init = TRUE)
  xlsx::read.xlsx(myfile, 1)
}))
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以强制关闭/杀死JVM以便在子进程中重新启动它?

java jvm r cran rjava

12
推荐指数
1
解决办法
1134
查看次数

未附加名称空间时的R包依赖性问题

我一直认为在'Depends'字段中有一个包会自动导入命名空间.但是,似乎在R 2.15中,在包实际附加到搜索路径之前,依赖性不可用.这是预期的行为吗?

问题如下所示:假设有一个包'Child' 取决于,但没有显式导入名为'Parent'的包,并包含一个调用'Parent'命名空间中的对象的函数.然后,在没有实际附加"Child"的情况下调用此函数时,无法找到"Parent"中的函数.

这里是一个bigdata包装手册的例子,但问题非常普遍:

x = matrix(rnorm(50*80),50,80)
beta = c(3,2,1.5,rep(0,77))
y = rnorm(50) + x%*%beta
z1 = bigdata::lasso.stars(x,y)
Run Code Online (Sandbox Code Playgroud)

该示例失败,因为lasso.stars依赖于'glmnet',它bigdata在连接之前未加载.能够调用的唯一方法lasso.stars是实际附加bigdata包:

library(bigdata)
z1 = bigdata::lasso.stars(x,y)
Run Code Online (Sandbox Code Playgroud)

现在为了进一步复杂的事情,看来这个问题被继承到任何"孙子"包,进口在这种情况下lasso.stars功能.我很难找到一个很好的例子,但我相信他们在那里.

这是一个错误吗?我知道可以通过要求包作者使用Imports而不是Depends来避免它,但实际上CRAN上的大多数包仍然使用Depends.如果R会自动将任何Depends包的命名空间导入子包命名空间,似乎很容易避免这个问题.

r cran

11
推荐指数
1
解决办法
602
查看次数