R 中 attach() 的问题
Problems with attach() in R
我在 R 中有一个列表,我附上了它。
> attach(myList)
> summary(myList)
Length Class Mode
grData 3 data.frame list
maxDate 1 POSIXct numeric
query 1 -none- character
newData 3 data.frame list
updateQuery 1 -none- function
好的,我的单子真的附上了
> search()
[1] ".GlobalEnv" "myList" "package:xlsx" "package:xlsxjars"
[5] "package:rJava" "package:quantmod" "package:TTR" "package:xts"
[9] "package:zoo" "package:tidyr" "package:stringr" "package:RPostgreSQL"
[13] "package:DBI" "package:dplyr" "tools:rstudio" "package:stats"
[17] "package:graphics" "package:grDevices" "package:utils" "package:datasets"
[21] "package:methods" "Autoloads" "package:base"
grData 我列表中的数据框有 11 行:
> summary(myList$grData)
date application_id value
Min. :2016-10-01 Min. : 7.0 Min. : 5769
1st Qu.:2016-10-01 1st Qu.: 9.5 1st Qu.: 33113
Median :2016-10-01 Median :12.0 Median : 65821
Mean :2016-10-01 Mean :22.0 Mean :106336
3rd Qu.:2016-10-01 3rd Qu.:37.5 3rd Qu.:108861
Max. :2016-10-01 Max. :49.0 Max. :507376
但是当我尝试在没有 myList 的情况下调用 grData 时,我得到了 0 行的数据框
> summary(grData)
date application_id value
Min. :NA Min. : NA Min. : NA
1st Qu.:NA 1st Qu.: NA 1st Qu.: NA
Median :NA Median : NA Median : NA
Mean :NA Mean :NaN Mean :NaN
3rd Qu.:NA 3rd Qu.: NA 3rd Qu.: NA
Max. :NA Max. : NA Max. : NA
更新。 globalEnv
中没有 grData 对象
> ls()
[1] "checkDbLag" "con" "i" "newDate" "myList" "updateQuery"
[7] "x"
哪里有问题?
许多 R 风格指南(如 http://google-styleguide.googlecode.com/svn/trunk/google-r-style.html#attach)实际上不推荐使用 attach()
,因为它会导致错误的结果。
根据 https://www.r-bloggers.com/to-attach-or-not-attach-that-is-the-question/ 的建议,您有三个更好的选择:
- 直接引用变量(例如
lm(ds$x ~ ds$y)
)
- 为支持此功能的命令指定数据框(例如
lm(y ~ x, data=ds)
)
- 使用
with()
函数,returns 计算任何表达式的值(例如 with(ds,lm(y ~x))
)
(还要注意 within()
函数,它类似于 with()
,但 returns 是一个修饰的对象。)
如果您仍然想使用 attach()
,即使有所有替代方案,我建议您提供一个完全可重现的示例。通过阅读您的代码,您似乎提供了不完整的输出(一次您将列表引用为 myList,另一次您将其引用为 RollingMau)。
我在 R 中有一个列表,我附上了它。
> attach(myList)
> summary(myList)
Length Class Mode
grData 3 data.frame list
maxDate 1 POSIXct numeric
query 1 -none- character
newData 3 data.frame list
updateQuery 1 -none- function
好的,我的单子真的附上了
> search()
[1] ".GlobalEnv" "myList" "package:xlsx" "package:xlsxjars"
[5] "package:rJava" "package:quantmod" "package:TTR" "package:xts"
[9] "package:zoo" "package:tidyr" "package:stringr" "package:RPostgreSQL"
[13] "package:DBI" "package:dplyr" "tools:rstudio" "package:stats"
[17] "package:graphics" "package:grDevices" "package:utils" "package:datasets"
[21] "package:methods" "Autoloads" "package:base"
grData 我列表中的数据框有 11 行:
> summary(myList$grData)
date application_id value
Min. :2016-10-01 Min. : 7.0 Min. : 5769
1st Qu.:2016-10-01 1st Qu.: 9.5 1st Qu.: 33113
Median :2016-10-01 Median :12.0 Median : 65821
Mean :2016-10-01 Mean :22.0 Mean :106336
3rd Qu.:2016-10-01 3rd Qu.:37.5 3rd Qu.:108861
Max. :2016-10-01 Max. :49.0 Max. :507376
但是当我尝试在没有 myList 的情况下调用 grData 时,我得到了 0 行的数据框
> summary(grData)
date application_id value
Min. :NA Min. : NA Min. : NA
1st Qu.:NA 1st Qu.: NA 1st Qu.: NA
Median :NA Median : NA Median : NA
Mean :NA Mean :NaN Mean :NaN
3rd Qu.:NA 3rd Qu.: NA 3rd Qu.: NA
Max. :NA Max. : NA Max. : NA
更新。 globalEnv
中没有 grData 对象> ls()
[1] "checkDbLag" "con" "i" "newDate" "myList" "updateQuery"
[7] "x"
哪里有问题?
许多 R 风格指南(如 http://google-styleguide.googlecode.com/svn/trunk/google-r-style.html#attach)实际上不推荐使用 attach()
,因为它会导致错误的结果。
根据 https://www.r-bloggers.com/to-attach-or-not-attach-that-is-the-question/ 的建议,您有三个更好的选择:
- 直接引用变量(例如
lm(ds$x ~ ds$y)
) - 为支持此功能的命令指定数据框(例如
lm(y ~ x, data=ds)
) - 使用
with()
函数,returns 计算任何表达式的值(例如with(ds,lm(y ~x))
) (还要注意within()
函数,它类似于with()
,但 returns 是一个修饰的对象。)
如果您仍然想使用 attach()
,即使有所有替代方案,我建议您提供一个完全可重现的示例。通过阅读您的代码,您似乎提供了不完整的输出(一次您将列表引用为 myList,另一次您将其引用为 RollingMau)。