为什么会这样;segfault“;在R中具有dplyr排列功能
以下代码始终在my R system 3.2.2上产生崩溃:为什么会这样;segfault“;在R中具有dplyr排列功能,r,dplyr,R,Dplyr,以下代码始终在my R system 3.2.2上产生崩溃: > R.version _ platform i486-slackware-linux-gnu arch i486 os linux-gnu system i486, linux-g
> R.version
_
platform i486-slackware-linux-gnu
arch i486
os linux-gnu
system i486, linux-gnu
status
major 3
minor 2.2
year 2015
month 08
day 14
svn rev 69053
language R
version.string R version 3.2.2 (2015-08-14)
nickname Fire Safety
> lll = list(list(5,3,4), list(5,3,7), list(6,2,1), list(6,1,3), list(5,2,1))
> dd = data.frame(do.call(rbind, lll))
> dd
X1 X2 X3
1 5 3 4
2 5 3 7
3 6 2 1
4 6 1 3
5 5 2 1
> dplyr::arrange(dd, X1)
*** caught segfault ***
address (nil), cause 'memory not mapped'
Traceback:
1: .Call("dplyr_arrange_impl", PACKAGE = "dplyr", data, dots)
2: arrange_impl(.data, dots)
3: arrange_.tbl_df(tbl_df(.data), .dots = dots)
4: arrange_(tbl_df(.data), .dots = dots)
5: as.data.frame(arrange_(tbl_df(.data), .dots = dots))
6: arrange_.data.frame(.data, .dots = lazyeval::lazy_dots(...))
7: arrange_(.data, .dots = lazyeval::lazy_dots(...))
8: dplyr::arrange(dd, X1)
Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace
为什么会发生此崩溃?我如何更正它 它是一个嵌套的
列表
,因此一种方法是取消列表
内部列表
,rbind
外部列表
并转换为数据。frame
dd <- data.frame(do.call(rbind, lapply(lll, unlist)))
arrange(dd, X1)
# X1 X2 X3
#1 5 3 4
#2 5 3 7
#3 5 2 1
#4 6 2 1
#5 6 1 3
它是一个嵌套的
列表
,因此一种方法是取消列表
内部列表
,rbind
外部列表
,并转换为数据框
dd <- data.frame(do.call(rbind, lapply(lll, unlist)))
arrange(dd, X1)
# X1 X2 X3
#1 5 3 4
#2 5 3 7
#3 5 2 1
#4 6 2 1
#5 6 1 3
这必须是
dplyr
中的错误、R核心中的错误,或者是dplyr
的编译组件与R核心之间的不兼容。在R语言中不可能做任何导致解释器崩溃的事情
由于我自己对dplyr不是特别熟悉,我想最可能的解释是不兼容,其次是dplyr中的bug。例如,如果您使用install.packages
安装了dplyr,然后升级了R core,但没有重新安装dplyr,则可能会出现不兼容。R core具有防御机制,可以防止不兼容的编译代码模块被更新的解释器拾取,但它们并不总是起作用
如果在清除了
$HOME/R
后,您仍然可以在最新版本的R和dplyr中重现问题,然后重新安装dplyr,我建议您在提交错误报告。这必须是dplyr中的错误,R核心中的错误,或者dplyr
的已编译组件与R核心之间不兼容。在R语言中不可能做任何导致解释器崩溃的事情
由于我自己对dplyr不是特别熟悉,我想最可能的解释是不兼容,其次是dplyr中的bug。例如,如果您使用install.packages
安装了dplyr,然后升级了R core,但没有重新安装dplyr,则可能会出现不兼容。R core具有防御机制,可以防止不兼容的编译代码模块被更新的解释器拾取,但它们并不总是起作用
如果在清除了$HOME/R
后,您仍然可以用最新版本的R和dplyr重现问题,然后重新安装dplyr,我建议您在提交错误报告。我发现以下代码也可以正常工作:
> dd = data.frame(t(sapply(lll, unlist)))
> dd
X1 X2 X3
1 5 3 4
2 5 3 7
3 6 2 1
4 6 1 3
5 5 2 1
> str(dd)
'data.frame': 5 obs. of 3 variables:
$ X1: num 5 5 6 6 5
$ X2: num 3 3 2 1 2
$ X3: num 4 7 1 3 1
>
> arrange(dd, X1)
X1 X2 X3
1 5 3 4
2 5 3 7
3 5 2 1
4 6 2 1
5 6 1 3
>
这里不需要do.call和rbind函数。我发现以下代码也可以正常工作:
> dd = data.frame(t(sapply(lll, unlist)))
> dd
X1 X2 X3
1 5 3 4
2 5 3 7
3 6 2 1
4 6 1 3
5 5 2 1
> str(dd)
'data.frame': 5 obs. of 3 variables:
$ X1: num 5 5 6 6 5
$ X2: num 3 3 2 1 2
$ X3: num 4 7 1 3 1
>
> arrange(dd, X1)
X1 X2 X3
1 5 3 4
2 5 3 7
3 5 2 1
4 6 2 1
5 6 1 3
>
这里不需要do.call和rbind函数。您是如何安装dplyr的?如果您检查str(dd)
,则列仍然是list
。lll
是一个嵌套列表。您可能需要dd将'lll'转换为数据帧的最佳方式是什么?我得到错误:在R-devel(3.4.0)上使用dplyr 0.5.0时,不支持向量类型列表。什么是packageVersion(“dplyr”)
?您可以尝试更新到0.5.0(尽管您的R版本也已过期…理想情况下您可以同时更新这两个版本…)您是如何安装dplyr的?如果您检查str(dd)
,则列仍然是列表。lll
是一个嵌套列表。您可能需要dd将'lll'转换为数据帧的最佳方式是什么?我得到错误:在R-devel(3.4.0)上使用dplyr 0.5.0时,不支持向量类型列表。什么是包版本(“dplyr”)
?您可以尝试更新到0.5.0(尽管您的R版本也已过时…理想情况下您可以同时更新这两个版本…)我已使用“install.packages”安装了dplyr。我也更新了R,但不确定是在dplyr之前还是之后。我现在正在尝试更新这两个版本。我已经用“install.packages”安装了dplyr。我也更新了R,但不确定是在dplyr之前还是之后。我正在尝试更新这两个。