- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
谁能向我解释为什么 bar
不起作用?这是 data.table
中的错误吗?
Circles<-data.table(radius=1:10)
foo<-function(Circ){
Circ[,diameter:=2*radius]
}
dput(x = foo,file = 'func.R')
bar<-dget(file = 'func.R')
foo(Circles)
bar(Circles)
这与 dget 函数将它返回的对象的环境设置为 .GlobalEnv
之外的其他内容有关。有一个很简单的解决方法,但它会让像我这样的菜鸟疯狂地试图弄清楚它为什么一开始就坏了。
MyDGet<-function(file){
temp<-dget(file=file)
environment(temp)<-.GlobalEnv
return(temp)
}
bar<-MyDGet(file = 'func.R')
最佳答案
来自dput
:
If x is a function the associated environment is stripped. Hence scoping information can be lost.
parent.env(environment(bar))
# <environment: namespace:base>
foo(Circles)
和 bar(Circles)
都会导致 [.data.table
被调度,但在这种情况下 bar()
,查看traceback()
:
traceback()
# 6: stop("Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(\":=\").")
# 5: `:=`(diameter, 2 * radius)
# 4: `[.data.frame`(x, i, j)
# 3: `[.data.table`(Circ, , `:=`(diameter, 2 * radius)) at func.R#3
# 2: Circ[, `:=`(diameter, 2 * radius)] at func.R#3
# 1: bar(Circles)
如您所见,[.data.table
调度到 [.data.frame
。发生这种情况是因为 [.data.table
:
if (!cedta()) {
# Fix for #5070 (to do)
Nargs = nargs() - (!missing(drop))
ans = if (Nargs<3L) `[.data.frame`(x,i) # drop ignored anyway by DF[i]
else if (missing(drop)) `[.data.frame`(x,i,j)
else `[.data.frame`(x,i,j,drop)
# added is.data.table(ans) check to fix bug #5069
if (!missing(i) & is.data.table(ans)) setkey(ans,NULL) # See test 304
return(ans)
}
这里 !cedta()
在 bar()
的情况下是 TRUE
。我们可以通过设置 options(datatable.verbose=TRUE)
并重新运行来确认这是一个 cedta
问题。然后我们得到:
# cedta decided 'base' wasn't data.table aware
那么cedta()
是做什么的呢?
假设您正在使用 data.table
对象,并且还使用不了解 data.table
数据结构的包。假设包有一个名为funA
的函数。你调用的函数如下:
funA(DT)
现在由于包不支持data.table,它可以使用如下代码:
funA <- function(...) {
....
tmp <- DT[, cols]
....
}
这里 DT[, cols]
不能在 data.table 上正常工作,因为 data.table 的默认值存在一些细微差异(默认情况下 with = TRUE
)。对于 data.table,我们需要 DT[, cols, with=FALSE]
。
为了让您的代码正常运行,我们必须确定您正在对一个包中的函数使用 data.table 对象,而该包不知道如何从 data.table 中对列进行子集化(或者换句话说,而不是 data.table 感知)。
我们通过查看函数的父环境来做到这一点,它给出了你正在使用的包的命名空间(如果你正在使用一个包),然后我们检查这个包是否 imports 或 取决于 data.table,或者它是否是我们列入白名单的包之一。
这种情况很特殊(或奇怪),因为 您定义的函数 的父环境为 base
,而命名空间 base
不是data.table 感知。
因此这实际上不是一个错误。
?dget
将其描述为 不是 在 R session 之间传输对象的好方法(在 NOTE
部分下)。 saveRDS
工作正常,您可以将其用作替代(更好的)解决方法:
saveRDS(foo, "func.RDS")
bar <-readRDS("func.RDS")
bar(Circles) # works
关于r - 关于 data.table 环境错误的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29549690/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!