小编Jer*_*oen的帖子

将geom_smooth与变换后的y一起使用

geom_smoothy公式中的变量被转换时,有没有办法使用?例如:

#This works:
 myplot <- qplot(speed, dist, data=cars)
(myplot + geom_smooth(method="lm", formula=y~log(x)))

#does not work
(myplot + geom_smooth(method="lm", formula=log(y)~x))
Run Code Online (Sandbox Code Playgroud)

我所追求的是这样一条线:

myplot + geom_line(aes(x=speed, y=exp(predict(lm(log(dist)~speed)))))
Run Code Online (Sandbox Code Playgroud)

r ggplot2

6
推荐指数
1
解决办法
1262
查看次数

R和getpwuid()

我使用apparmor在Ubuntu 11.10上沙箱R. 我注意到的一件事是,对于R创建的每个png或pdf图,它都会显示警告:

(process:4589): GLib-WARNING **: getpwuid_r(): failed due to: Permission denied.
Run Code Online (Sandbox Code Playgroud)

但是,即使拒绝对/ etc/passwd的读访问,一切似乎都运行得很好.我不打算给R这些权限,因为它似乎没有必要我想做什么.然而,反复出现的警告有点令人讨厌.

R/src中的快速grep"getpwuid"显示了调用它的三个地方:

r-base-2.14.2/src/main/platform.c:  stpwd = getpwuid(sb.st_uid);
r-base-2.14.2/src/unix/sys-unix.c:  stpwd = getpwuid(getuid());
r-base-2.14.2/src/unix/sys-unix.c:  stpwd = getpwuid(geteuid());
Run Code Online (Sandbox Code Playgroud)

但是,我不清楚这是做什么的.

问题:

  • 为什么R需要访问passwd文件才能创建绘图?
  • 有什么办法可以阻止R在写入png或pdf设备时调用getpwuid_r()(不重新编译R)?

r apparmor

5
推荐指数
1
解决办法
588
查看次数

测试S4对象是否是实例

如何测试对象是否是S4类的实例(不确定这是否是正确的术语)?我知道函数,isS4但是对于类定义等也会返回true.例如:

traj <- setClass(
  Class="Trajectories",
  representation=representation(
    times = "numeric",
    traj = "matrix"
  )
)

trajclass <- getClass("Trajectories")
trajobject <- new(Class="Trajectories",times=c(1,3),traj=matrix(1:4,ncol=2))

isS4(traj)
isS4(trajclass)
isS4(trajobject)
Run Code Online (Sandbox Code Playgroud)

trajobject在这种情况下,我只对包含数据的对象感兴趣; 与方法或类定义无关.是否有一个本机函数可用于测试S4对象是否是实际对象?即使用print(object)输出时开始:

类"foo"的对象.....

r cran s4

5
推荐指数
1
解决办法
904
查看次数

setuid等效于非root用户

Linux有一些类似于setuid的 C接口,它允许程序使用例如用户名/密码切换到不同的用户吗?setuid的问题在于它只能由超级用户使用.

我正在运行一个简单的Web服务,它需要作为登录用户执行作业.因此主进程以root身份运行,并在用户登录后分叉并调用setuid切换到相应的uid.但是,我对以root运行的主进程不太熟悉.我宁愿让它作为另一个用户运行,并且有一些机制可以切换到另一个类似的用户su(但是没有启动新进程).

c linux ubuntu setuid linux-kernel

5
推荐指数
2
解决办法
4325
查看次数

批量裁剪并调整图像大小以创建缩略图

我有一大堆jpg图像,我想创建缩略图.图像都有不同的大小和分辨率,但我希望所有缩略图都有标准尺寸,例如120x80px.但是,我不想拉伸图像.所以我想做以下事情:

  1. 将图像裁剪为1.5:1的宽高比.将裁剪区域居中(即左右切割等量,或上下切割
  2. 将图像大小调整为120 x 80像素.

是否有linux命令可以这样做?我查看了imagemick转换,但我无法弄清楚如何进行居中裁剪.您似乎必须手动指定每个图像的裁剪区域?

linux image imagemagick thumbnails imagemagick-convert

5
推荐指数
1
解决办法
2148
查看次数

Homebrew R建造失踪的开罗

我使用brew在OSX 10.7.5服务器上安装了R:

brew install R
Run Code Online (Sandbox Code Playgroud)

一切看起来都那么好,但是开罗没有工作:

> svg(tempfile())
Warning messages:
1: In svg(tempfile()) :
  unable to load shared object '/usr/local/Cellar/r/2.15.2/R.framework/Resources/library/grDevices/libs//cairo.so':
  dlopen(/usr/local/Cellar/r/2.15.2/R.framework/Resources/library/grDevices/libs//cairo.so, 6): image not found
2: In svg(tempfile()) : failed to load cairo DLL
Run Code Online (Sandbox Code Playgroud)

共享对象文件似乎完全丢失:

id-86-243:Resources jeroen$ ls -ltr library/grDevices/libs/
total 488
-rwxrwxr-x  1 jeroen  admin  245764 Dec 22 17:03 grDevices.so
Run Code Online (Sandbox Code Playgroud)

我很少使用OSX,所以我不太确定这是否是R的特定分布中的错误,或者如果我在构建它时做错了什么?

macos homebrew r cairo cran

5
推荐指数
1
解决办法
2053
查看次数

使用 tryCatch 保存错误回溯

当在我的 web 应用程序中调用 R 函数时,我想在发生错误时捕获堆栈跟踪并将其呈现给用户以进行调试。traceback()类似于交互式会话中的输出。但是,traceback当在错误处理程序内部调用它时,它似乎不起作用,它返回No traceback available

f <- function() {
    g <- function() stop("test traceback")
    g()
}

errhandler <- function(e){
  stacktrace <- traceback()
  unlist(stacktrace);
}

out <- tryCatch(f(), error=errhandler) 
Run Code Online (Sandbox Code Playgroud)

有什么方法可以以编程方式捕获错误的堆栈跟踪吗?traceback()即获取错误后手动调用时得到的输出:

f()
traceback()
Run Code Online (Sandbox Code Playgroud)

r stack-trace cran

5
推荐指数
1
解决办法
1570
查看次数

获取当前调用的函数来编写匿名递归函数

如何在函数内获取递归应用的当前函数?这是一个简单的例子:

myfun <- function(x) {
  if(is.list(x)){
    lapply(x, myfun)
  } else {
    length(x)
  }
}
Run Code Online (Sandbox Code Playgroud)

我想把它变成匿名,但是我不知道lapply在没有名字时如何告诉使用当前函数.我尝试Recall但是这不起作用:

(function(x) {
  if(is.list(x)){
    lapply(x, Recall)
  } else {
    length(x)
  }
})(cars)
Run Code Online (Sandbox Code Playgroud)

match.call()[[1]]没有帮助匿名函数.

r

5
推荐指数
1
解决办法
243
查看次数

任何/所有的高效版本

我经常遇到需要检查某个条件是否适用于非常大的向量或列表的任何或所有元素的情况.例如,检查列表是否包含NULL我将使用的任何/仅元素:

any(vapply(x, is.null, logical(1))
all(vapply(x, is.null, logical(1))
Run Code Online (Sandbox Code Playgroud)

然而,这是低效的,因为它总是检查列表中的每个元素.更聪明的实现将停止检查何时找到第一个NULL或非NULL元素.即相当于:

is.null(x[[1]]) || is.null(x[[2]]) || is.null(x[[3]]) || ...
is.null(x[[1]]) && is.null(x[[2]]) && is.null(x[[3]]) && ...
Run Code Online (Sandbox Code Playgroud)

for循环执行此操作很慢.r-base提供了一些特殊情况,例如,这anyNA是一个有效的版本any(is.na(.)).但是我想知道我们是否可以更普遍地实现它并提供用于检查条件的优化函数:

all_fast(x, is.null)
any_fast(x, is.null)
Run Code Online (Sandbox Code Playgroud)

但是也:

all_fast(x, function(z) {length(z) == 2})
all_fast(x, is, "POSIXt")
Run Code Online (Sandbox Code Playgroud)

performance r cran

5
推荐指数
1
解决办法
198
查看次数

序列化 R 对象的 MIME 类型

OpenCPUContent-Type: application/octet-stream当前在提供序列化 R 对象(即从serialize或保存的数据)时使用saveRDS。例如:

curl -v https://public.opencpu.org/ocpu/library/MASS/data/cats/rds 2>&1 \
| grep Content-Type

< Content-Type: application/octet-stream
< Access-Control-Allow-Headers: Origin, Content-Type, Accept, Cache-Control
< Access-Control-Expose-Headers: Location, X-ocpu-session, Content-Type, Cache-Control
Run Code Online (Sandbox Code Playgroud)

然而,对于客户端和其他 OpenCPU 服务器来说,在交换数据时使用指定的 MIME 类型区分任意 blob 和 rds 对象会很好。

问题:什么适合Content-Type序列化的 R 对象?例如:

  • application/r-rds
  • application/r-serialized-object
  • ...

请注意,RFC8848现在建议不要使用X-前缀,并指出:

在应用程序协议上下文中使用的新参数的创建者:

  1. 应该假设他们创建的所有参数可能会变得标准化、公开、普遍部署或可在多个实现中使用。

content-type r http

5
推荐指数
0
解决办法
964
查看次数