奇怪:sapply无法在dplyr :: tbl_df()本地data.frame上工作

我还没有看到有人发布dplyr过与sapply以前一起使用导致的错误,所以我想问一下是否有人知道为什么会发生这种错误。这本身并不是主要的问题,因为解决方法确实很容易,但可能会让您中的有些人不知所措,想知道到底是怎么回事。示例数据是从此处获取的,而我在同一篇文章中对jbaums给出的代码进行了修改

样本数据

mydata <- data.frame(matrix(rlnorm(30*10,meanlog=0,sdlog=1), nrow=30))
colnames(mydata) <- c("categ", "var1","var2", "var3","var4", "var5", "var6", "var7", "var8", "var9")
mydata$var2 <- mydata$var2*5
mydata$categ <- sample(1:2)
mydata

循环功能可进行多个箱形图

sapply(seq_along(mydata)[-1], function(i) {
    y <- mydata[, i]
    names <- colnames(mydata)[i]
    plot(factor(mydata$categ), log(y + 1), main=names, ylab="foo",outpch=NA, las=1)
})

完美地运作。

现在使用后会发生此错误 tbl_df()

require(dplyr)
mydata2 <- tbl_df(mydata)
sapply(seq_along(mydata2)[-1], function(i) {
    y <- mydata2[, i]
    names <- colnames(mydata2)[i]
    plot(factor(mydata2$categ), log(y + 1), main=names, ylab="foo",outpch=NA, las=1)
})
 Error in xy.coords(x, y, xlabel, ylabel, log) : 
  'x' and 'y' lengths differ 

解决方法非常简单,因为:

mydata2 <- data.frame(mydata2)
## OR
lapply(...)

然后代码再次平滑运行。

知道为什么会这样吗?认为这sapplyvs的问题lapply,但我发现它很有趣。

干杯,

npjc

不同之处在于[每种方法的工作原理:

> mydata[,2]
 [1] 5.0044042 0.8456266 1.6407979 0.3850787 6.0767393 1.8768533 1.0071454 0.3674155 0.6573932 0.3614813
[11] 1.8037157 1.1420720 0.5842170 0.4632418 1.1114478 1.1753951 0.1077499 0.9043782 3.0877567 0.9421167
[21] 1.2429474 1.8952458 0.4592660 0.3842183 1.1274421 2.2946488 2.0904511 0.4132986 0.3421766 0.7592236

> mydata2[,2]
Source: local data frame [30 x 1]

        var1
1  5.0044042
2  0.8456266
3  1.6407979
4  0.3850787
5  6.0767393
6  1.8768533
7  1.0071454
8  0.3674155
9  0.6573932
10 0.3614813
..       ...

因此,您想要重现预期的行为简化而不是保留

mydata2[[2]]

注意类的变化:

> class(mydata)
[1] "data.frame"
> class(mydata2)
[1] "tbl_df"     "tbl"        "data.frame"
> class(mydata2[,2])
[1] "tbl_df"     "data.frame"

从: ?tbl_df

Methods

tbl_df implements two important base methods:

print
Only prints the first 10 rows, and the columns that fit on screen

[
Never simplifies (drops), so always returns data.frame

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法将`spec_tbl_df / tbl_df / tbl / data.frame`对象转换为函数

dplyr显示tbl_df中小data.frame的所有行和列

如何转换从Excel中从““ tbl_df”“ tbl”“ data.frame”导入的数据集。到“ xts”?

为data.frame和tbl_df设置行和列

使用循环时tbl_df和data.frame的区别

as.tibble(),as_data_frame()和tbl_df()有什么区别?

提取单个dplyr tbl_df行作为矢量

在dplyr tbl_df中删除列的最佳实践

使用变量名称过滤dplyr的tbl_df

在本地主机上工作且无法在线工作

如何使用dplyr将tbl_mysql类的对象转换为tbl_df?

在R中使用ifelse()将变量分配给tbl_df / data.frame对象会导致R的内存不足

将我自己的函数应用于dplyr tbl_df

打印时在dplyr tbl_df中四舍五入数值

各种功能对tbl_df(dplyr使用的数据帧类型)的反应很差

为什么画布无法在本地工作但可以在TRYIT上工作

尽管React.js Material-UI项目在本地工作,但无法在Codepen上工作

无法在azure服务器上工作,但在本地环境下可以正常工作吗?

代码无法在线工作,但可以在本地主机上工作

使pdfjs在本地文件上工作

无法使PHP在Ubuntu上工作

无法让ucfirst()在变量上工作

无法让 docker 在 mac 上工作

Wifi 无法在 Kubuntu 上工作

无法使quodlibet在13.10上工作

VESA无法在BOCHS上工作

无法让 ElectronPlayer 在 Lubuntu 上工作

在JSFiddle上工作,但不在本地工作?

jQuery无法在工作网络上工作?