- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 glmnet 和 glmnetcr 来拟合序数回归模型。
不幸的是,我的模型矩阵是 ~640000 * 5000。这大于可以存储在 32 位整数中的大小,我遇到了其他人描述的相同问题:R vector size limit: "long vectors (argument 5) are not supported in .C"
如果我只使用一半的数据,我可以在内存充足的本地服务器上运行它并且没有问题。
我试图通过使用 dotCall64 包来实现上述帖子中的“解决方案”。我用 .C64 替换了 .Fortran 调用,并为每个变量指定了数据类型。但是,每次我运行我的代码时,我都会得到无意义的 lambda 值 (9.9e35) 或段错误,例如:
* 捕获段错误 *地址 0x1511aaeb0,导致“内存未映射”
我得到的是哪一个,每次的确切地址都不一样,所以我假设我在实现这个解决方案时做错了什么。
这是函数 lognet() 中的代码(该函数最终由 glmnetcr 和 glmnet 调用并将变量传递给 fortran 代码)
.Fortran("lognet", parm = alpha, nobs, nvars, nc, as.double(x),
y, offset, jd, vp, cl, ne, nx, nlam, flmin, ulam, thresh,
isd, intr, maxit, kopt, lmu = integer(1), a0 = double(nlam *
nc), ca = double(nx * nlam * nc), ia = integer(nx),
nin = integer(nlam), nulldev = double(1), dev = double(nlam),
alm = double(nlam), nlp = integer(1), jerr = integer(1),
PACKAGE = "glmnet")
.C64("lognet", SIGNATURE = c("double","int", "int", "int", "int64",
"double","double","int", "double","double"
"int", "int", "int", "double","double",
"double","int", "int", "int", "int",
"int", "double","double","int", "int",
"double","double","double","int", "int"),
parm = alpha, nobs, nvars, nc, as.double(x),
y, offset, jd, vp, cl, ne, nx, nlam, flmin, ulam, thresh,
isd, intr, maxit, kopt, lmu = integer(1), a0 = double(nlam * nc), ca = double(nx * nlam * nc), ia = integer(nx),
nin = integer(nlam), nulldev = double(1), dev = double(nlam),
alm = double(nlam), nlp = integer(1), jerr = integer(1),
PACKAGE = "glmnet")
library(glmnetcr)
library(dotCall64)
x1 <- cbind(c(0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1),c(0,0,0,1,0,1,1,1,0,0,0,0,0,1,1,1),c(0,0,1,0,1,0,1,1,0,0,0,0,1,0,1,1),c(0,1,0,0,1,1,0,1,0,0,0,0,1,1,0,1),c(0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1),c(0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1),c(0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,1))
y1 <- c(0,0,0,1,1,1,2,2,0,1,0,1,1,2,1,2)
testA <- glmnetcr(x=x1,y=y1,method = "forward", nlambda=10,lambda.min.ratio=0.001, alpha =1,maxit = 500,standardize=FALSE)
使用原始的 lognet() 代码运行它不会产生任何问题。使用修改后的 lognet() 代码运行它会导致奇怪的 lambda 值估计和/或段错误(似乎是随机发生的)。我的第一个猜测是我输入了一个错误的变量,但我已经检查了两次但看不出问题所在。另一种选择是底层 Fortran 代码无法处理 64 位整数。我对 Fortran 的了解为零,如果是这种情况,我什至不确定如何开始解决问题。
最佳答案
所以我联系了 glmnet 的包维护者。他们有转换为 .C64 的经验。在他们的帮助和一点点摆弄下,我能够让下面的代码工作。为了运行它,我创建了一个名为 glmnet64 的新函数,它调用了另一个新函数 lognet64 而不是原来的 lognet 调用。 lognet64 与原始 lognet 函数相同,但用以下内容替换了 .Fortran 调用:
.C64("lognet", SIGNATURE = c("double", "integer","integer","integer","double",
"double", "double", "integer","double", "double",
"integer","integer","integer","double", "double",
"double", "integer","integer","integer","integer",
"integer","double", "double", "integer","integer",
"double", "double", "double","integer","integer"),
parm = alpha,nobs, nvars, nc, as.double(x),
y, offset, jd, vp, cl,
ne, nx, nlam, flmin, ulam,
thresh, isd, intr, maxit, kopt,
lmu = integer(1), a0 = double(nlam * nc),
ca = double(nx * nlam * nc), ia = integer(nx), nin = integer(nlam),
nulldev = double(1), dev = double(nlam), alm = double(nlam),
nlp = integer(1), jerr = integer(1),
INTENT = c(rep("rw",4),"r",rep("rw",15),rep("w",10)),
PACKAGE = "glmnet",
NAOK = TRUE)
关键似乎是正确指定所有变量类型。能够在 .Fortran 调用之前使用 browser() 来获得正确的结果。此外,通过指定 INTENT 和设置 NAOK = TRUE(如预期)来提高速度。肯定会推荐那些。
关于r - 在 Glmnet 和 dotCall64 中使用 R 中的长向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54599793/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!