首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在dyn.load w/ ioslides_presentation运行时使用ioslides_presentation时出错:闪亮

在dyn.load w/ ioslides_presentation运行时使用ioslides_presentation时出错:闪亮
EN

Stack Overflow用户
提问于 2015-01-03 17:28:11
回答 1查看 339关注 0票数 1

一位同事将数千个S函数和Fortran子程序移植到R中。本机R函数包含在5个.RData文件中,Fortran子程序包含在2个.dll文件中。

为了使我的文档更可移植,这些文件已经上传到黑板,并被加载到R中

代码语言:javascript
复制
---
title: "dyn.load and Shiny"
subtitle: "Why can't we all just get along?"
author: "Jason Freels"
output:
  ioslides_presentation:
    widescreen: true
runtime: shiny
---

```{r echo=FALSE,message=FALSE}

SetInternet2(真)

download.file("http://afit.blackboard.com/bbcswebdav/users/jfreels/DFORRT.dll"

代码语言:javascript
复制
      paste(c(getwd(),"/DFORRT.dll"), collapse=""),
代码语言:javascript
复制
      method="internal",mode="ab")

dyn.load("DFORRT.dll")

download.file("http://afit.blackboard.com/bbcswebdav/users/jfreels/SPLIDA.dll"

代码语言:javascript
复制
      paste(c(getwd(),"/SPLIDA.dll"), collapse=""),
代码语言:javascript
复制
      method="internal",mode="ab")

dyn.load("SPLIDA.dll")

a<-url("https://afit.blackboard.com/bbcswebdav/users/jfreels/echapters.RData“);加载(A)

b<-url("https://afit.blackboard.com/bbcswebdav/users/jfreels/RSplida Codes.RData");加载(B)

c<-url("https://afit.blackboard.com/bbcswebdav/users/jfreels/RSplidaData.RData“);加载(C)

d<-url("https://afit.blackboard.com/bbcswebdav/users/jfreels/RSplidaUser.RData“);load(d)

e<-url("https://afit.blackboard.com/bbcswebdav/users/jfreels/Text data.RData“);加载(E)

代码语言:javascript
复制

这段代码非常适合pdf_document、html_document和ioslides_presentation参数,当我添加runtime: shiny时,可以成功地在RStudio查看器中生成演示文稿的预览。但是,当我尝试将演示文稿部署到shinyapps.io时,会出现一个错误:“无法找到函数setInternet2”。

以前,我尝试使用以下方法在本地加载.dll文件

代码语言:javascript
复制
for (i in 1:2){ dyn.load(list.files(getwd())[grep("dll",strsplit(list.files(getwd()),"\\W+"))][i]) } 

使用此方法,我还可以在RStudio中成功地生成预览,但是当我试图部署演示文稿时,我会看到一个不同的错误,即加载共享库的尝试导致了一个“无效的ELF头”。

在闪亮的(或shinyapps.io)文件和.dll文件之间是否存在冲突?

提前谢谢你,

杰森

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-03 19:35:00

也许在文档中不清楚,但是ShinyApps.io使用Linux实例(Ubuntu),因此您肯定不能在那里加载.dll文件(仅用于Windows)。最自然和可移植的解决方案是使其成为一个R包,将其放在Github上,使用devtools::install_github()安装它,然后将应用程序部署到ShinyApps.io上。然后,这个包将在Linux上重新安装和编译,您不需要关心您的Fortran代码是变成.dll还是.so,还是其他什么。

如果您真的不愿意制作一个R包(这实际上相当容易,而且有很大的好处),您当然可以调用R CMD SHLIB来编译Fortran代码,但是不应该硬编码扩展为.dll。根据您的平台的不同,可能会有所不同:使用.Platform$dynlib.ext代替。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27757545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档