我试图抓住C++/Rcpp作为R的扩展,用于繁重的计算任务.最终,这些C++库应该集成在一个包中,因此我正在寻找一个我需要轻松工作的工具/ IDE的设置/组合.我知道很多都是依赖于味道的,但在选择之前知道我的选择仍然会很好.
那么:当您使用C++库开发R包时,您使用的设置是什么?
对不起,如果之前已经问过这个问题.我找到了R的所有编辑器的列表,但没有专门针对开发包括C++代码的包.任何提示或技巧都非常感谢.
编辑:平台是Windows,但我可以毫无问题地移动到Linux(双启动,只有让我不使用ubuntu的东西是我的旧卡/旧屏幕组合缺乏一个像样的驱动程序)
我正在使用一个带有几十个字段的引用类.我已经设置了一个initialize()采用列表对象的方法.虽然有些字段依赖于列表元素的进一步计算,但大多数字段都是从列表元素直接分配的:
fieldA <<- list$A
fieldB <<- list$B
Run Code Online (Sandbox Code Playgroud)
我当时觉得自动化这个很好.举一个R伪代码的例子(这个例子显然不起作用):
for (field in c('A', 'B', 'C', 'D'))
field <<- list[[field]]
Run Code Online (Sandbox Code Playgroud)
我已经尝试过几次结束运行<<-,例如:
for field in c('A', 'B', 'C', 'D'))
do.call('<<-' c(field, list[[field]]))
Run Code Online (Sandbox Code Playgroud)
但没有骰子.
我的猜测是,在目前的参考类化身中,这种行为根本不可能,但是认为在SO土地上有人知道有更好的方法可以做到这一点可能是值得的.
我getYahooData()在TTR包中使用功能非常强烈.
我有这段代码:
for(i in 1:nrow(symbol)){
tryCatch(prices <- getYahooData(symbol$symbol[i], from, to, freq="daily",
type="price"),
warning=function(e) continue <- 0)
if (continue==0) next
}
Run Code Online (Sandbox Code Playgroud)
这个循环很长我得到这个错误:
文件错误(文件,"rt"):所有连接都在使用中调用:tryCatch ... doTryCatch - > getYahooData - > getYahooData - > read.table - > file执行暂停
我能做什么?
更新:
如果我使用closeAllConnections(),我得到:
I get: *** caught segfault *** address (nil), cause 'memory not mapped' Traceback: 1: getConnection(set[i]) 2: close(getConnection(set[i])) 3: closeAllConnections() aborting ...
Run Code Online (Sandbox Code Playgroud) 我为我生成ggplots的许多站点提供了一系列时间序列数据,显示了使用changepoint包的方法的变化.我编写了一个函数,它接受csv,执行一些计算以获得方法然后遍历站点,为每个站点生成一个图.我的问题是找不到在for循环中创建的对象.
下面是一个非常简单的示例,但会产生相同的错误:
df1 <- data.frame(date = seq(as.Date("2015-01-01"), as.Date("2015-01-10"),
by = "day"),
site1 = runif(10),
site2 = runif(10),
site3 = runif(10))
example <- function(df1){
sname <- names(df1)[-1]
for (i in 1:length(sname)){
df2 <- df1[,c(1, 1+i)]
df2$label <- factor(rep("ts", by=length(df2[,1])))
plot <- ggplot()+
geom_point(data=df2, aes(x=date, y=df2[,2]))+
geom_line(data=df2, aes(x=date, y=df2[,2]))
sname.i<-sname[i]
filename<-paste0(sname.i, "-test-plot.pdf")
ggsave(file=filename, plot)
}
}
example(df1)
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:"eval中的错误(expr,envir,enclos):找不到对象'df2'"
我不太确定问题是什么,因为我创建了类似的循环,这些循环在过去有效.如果我为i分配一个值并循环遍历循环中的代码,它可以正常工作.我在想环境问题?还是ggsave在做什么呢?感激地收到任何帮助/指针.谢谢.
我是Shiny的新手,我创造了一个非常简单的闪亮应用程序:
library(shiny)
ui <- fluidPage(
fluidRow(column(7,dataTableOutput('dto')))
)
server <- function(input,output){
output$dto <- renderDataTable({MYTABLE})
}
runApp(list(ui=ui,server=server))
Run Code Online (Sandbox Code Playgroud)
有没有办法放一个选项来下载表的结果(如果是CSV,XLSX则无关紧要......)
干杯
我搜索了网络和stackoverflow,发现了一些很棒的LaTeX资源,但我找不到任何关于编写自己的类和样式文件的体面手册.我遇到的一些问题是代码的哪一部分应该在类文件中,哪个在样式文件中,如何微调宏,如何定义和使用变量,......
我通过查看其他人的代码来解决一些问题,但我想有一些全面的概述.我应该看看哪些想法?
PS:我已经对乳胶进行了不那么简短的介绍,介绍了beamer和latex教程 - 一本入门书.这些都没有回答我的问题.
假设我有一个data.frame
x <- data.frame(a = c('A','A','A','A','A', 'C','C','C','C', 'B','B','B'),
b = c('a','c','a','a','c', 'd', 'e','e','d', 'b','b','b'),
c = c( 7, 3, 2, 4, 5, 3, 1, 1, 5, 5, 2, 3),
stringsAsFactors = FALSE)
> x
a b c
1 A a 7
2 A c 3
3 A a 2
4 A a 4
5 A c 5
6 C d 3
7 C e 1
8 C e 1
9 C d 5
10 B b 5
11 B b …Run Code Online (Sandbox Code Playgroud) 免责声明:这段代码是不好的做法.,只会因为类似bug的东西而起作用.切勿在真实情况下使用它.这个问题是关于R的有趣行为,没有别的.
看完这个问题后,我非常困惑.显然,ifelse可以访问应该隐藏的信息.
说我们这样做:
> x <- expression(dd <- 1:3)
> y <- expression(dd <- 4:6)
> z <- c(1,0)
> eval(x)
> eval(y)
>
Run Code Online (Sandbox Code Playgroud)
我们没有输出.逻辑,因为两个表达式实际上是向量dd的赋值.eval()不应该给出输出.但奇怪的是,当你尝试有趣的代码时
> ifelse(z==0,eval(x),eval(y))
[1] 4 2
Run Code Online (Sandbox Code Playgroud)
你得到输出??? 有人对此有解释吗?
它并不像"R评估然后使用dd"那么简单.无论你给z什么顺序,无论你使用什么条件,dd总是最后提到的eval().
> ifelse(z==0,eval(x),eval(y))
> dd
[1] 4 5 6
> ifelse(z==1,eval(x),eval(y))
> dd
[1] 4 5 6
> z <- c(0,1)
> ifelse(z==0,eval(x),eval(y))
> dd
[1] 4 5 6
> ifelse(z==1,eval(x),eval(y))
> dd
[1] 4 5 6
> ifelse(z==1,eval(y),eval(x))
> dd …Run Code Online (Sandbox Code Playgroud) 到目前为止,我已经为scala尝试了jsr223脚本的sling实现,但是无法正确设置它.当我这样做:
public static void main(String[] args) {
try {
new ScriptEngineManager().getEngineByName("scala").
eval("object HelloWorld {def main(args: Array[String]) {
println(\"Hello, world!\") }}");
} catch (ScriptException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
我什么也没得到:
javax.script.ScriptException: ERROR
org.apache.sling.scripting.scala.Script line 13 : not found: type
Script at org.apache.sling.scripting.scala.ScalaScriptEngine.eval(ScalaScriptEngine.scala:117)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247)
Run Code Online (Sandbox Code Playgroud)
类似的问题在这里讨论:http: //scala-programming-language.1934581.n4.nabble.com/How-to-compile-Scala-code-from-java-using-the-current-ClassLoader-instead-of-一个字符串为基础,classpat-td1955873.html#a1955873
和
也许还有另一个我不知道的实现.
任何帮助赞赏
我试图在我的规则模式中使用ifeq并且我遇到了问题.这是我遇到麻烦的规则:
$(OBJS): $(OBJDIR)/%.o : ../%.c
@mkdir -p $(dir $@)
ifeq(mcc.exe,$(CC))
o_file:=$(shell echo $@ | sed -e 's/\/cygdrive\///' | sed -e 's/\([a-zA-Z]\)/\1:/')
$(CC) $(CFLAGS) $< -o $(o_file)
else
$(CC) $(CFLAGS) $< -o $@
endif
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到:
"/bin/sh: -c: line 0: syntax error near unexpected token `mcc.exe,mcc.exe'
/bin/sh: -c: line 0: `ifeq(mcc.exe,mcc.exe)'"
Run Code Online (Sandbox Code Playgroud)
但是,当我不使用indention时,我得到:"Makefile:77:*缺少分隔符.停止."
我在Cygwin上使用GNU make 3.81.ifeq的整个问题来自于我有两个工具链的相同Makefile,其中一个(mcc.exe)无法处理/cygdrive/c/.../something路径,但应该有c: /.../something路径.如果您知道其他任何解决方法,我也将非常感激!
先感谢您!