为什么会这样;segfault“;在R中具有dplyr排列功能

为什么会这样;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

以下代码始终在my R system 3.2.2上产生崩溃:

> 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之前还是之后。我正在尝试更新这两个。