小编zub*_*rgu的帖子

使用带有Rcpp的第三方头文件

我有一个名为的头文件coolStuff.h包含一个awesomeSauce(arg1)我想在我的cpp源文件中使用的函数.

目录结构:

  • RworkingDirectory
    • sourceCpp
      • theCppFile.cpp
    • cppHeaders
      • coolStuff.h

代码:

#include <Rcpp.h>
#include <cppHeaders/coolStuff.h>
using namespace Rcpp;

// [[Rcpp::export]]
double someFunctionCpp(double someInput){

 double someOutput = awesomeSauce(someInput);

return someOutput;
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

 theCppFile.cpp:2:31: error: cppHeaders/coolStuff.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我已经移动了整个地方的文件和目录,似乎无法让它工作.我看到使用第三方标题的示例,只是说这样做:

#include <boost/array.hpp>
Run Code Online (Sandbox Code Playgroud)

(来自Hadley/devtools)

https://github.com/hadley/devtools/wiki/Rcpp

什么给出了什么?我整个上午一直在寻找,但找不到像我这样简单事情的答案.

更新01.11.12

好了,我已经想出如何在Rstudio中构建使用Rcpp的软件包,让我重新解释一下这个问题.我有一个独立的头文件coolStuff.h,它包含我想在我的cpp代码中使用的函数.

1)我应该在包目录结构中放置coolStuff.h,以便它包含的函数可以被CppFile.cpp使用?

2)如何在cpp文件中调用coolStuff.h?再次感谢你的帮助.我从上次谈话中学到了很多东西.

注意:我阅读了小插图"编写使用Rcpp的软件包",但没有解释如何执行此操作.

答案:

好吧,让我总结一下我的问题的答案,因为它分散在这个页面上.如果我得到一个错误的细节,请随时编辑或让我知道,我将编辑它:

因此,您找到了一个.h或多个.cpp文件,其中包含您要在.cpp要编写的文件中使用的函数或其他一些代码Rcpp.

让我们继续调用这个找到的代码coolStuff.h并调用你想要使用的函数awesomeSauce().让我们调用您正在编写的文件theCppFile.cpp.

(我应该注意这里.h文件和.cpp文件中的代码都是C++代码,它们之间的区别在于C++程序员以正确的方式保持组织.我将在这里讨论差异,但在SO上进行简单的搜索会引导你讨论差异.对于你需要使用你发现的代码的R程序员,没有真正的区别.)

简而言之:您可以使用一个文件,coolStuff.h如果它不调用其他库,通过剪切和粘贴theCppFile.cpp,或者如果您创建一个包,您可以将文件放在\src包含该theCppFile.cpp文件的目录中并在文件 …

c++ r rcpp

39
推荐指数
2
解决办法
9279
查看次数

查看Spark Dataframe列的内容

我正在使用Spark 1.3.1.

我试图在Python中查看Spark数据帧列的值.使用Spark数据帧,我可以df.collect()查看数据帧的内容,但是我没有看到Spark数据帧列的最佳方法.

例如,数据框df包含一个名为的列'zip_code'.所以我可以做df['zip_code'],它变成了一个pyspark.sql.dataframe.Column类型,但我找不到一种方法来查看值df['zip_code'].

python dataframe apache-spark pyspark

28
推荐指数
3
解决办法
5万
查看次数

为什么mean()这么慢?

一切都在问题中!我只是试着做一些优化,并且为了好奇而把钉子钉在脖子上,我试过了:

t1 <- rnorm(10)
microbenchmark(
  mean(t1),
  sum(t1)/length(t1),
  times = 10000)
Run Code Online (Sandbox Code Playgroud)

结果是mean()比"手动"计算慢6倍!

它是否源于在调用Internal(mean)之前mean()代码的开销,还是C代码本身更慢?为什么?有充分的理由,因此是一个很好的用例吗?

optimization performance r

27
推荐指数
2
解决办法
1237
查看次数

初始化结构数组

这是我刚刚在其他人的问题中找到的初始化.

my_data data[]={
    { .name = "Peter" },
    { .name = "James" },
    { .name = "John" },
    { .name = "Mike" }
};
Run Code Online (Sandbox Code Playgroud)

我之前从未见过这样的东西,也找不到解释.name可能是正确的.
我正在寻找的是这个过程如何逐步进行.

它看起来像是:

1) data;
2) *data;
3) (*data).name;
4) (*data).name="Peter";
Run Code Online (Sandbox Code Playgroud)

或者我完全错了?

c arrays struct initialization

23
推荐指数
3
解决办法
13万
查看次数

如何在"Nand to Tetris"课程中为ALU设置输出标志?

虽然我标记了这个作业,但它实际上是我自己做的一个免费课程.无论如何,该课程被称为"从Nand到俄罗斯方块",我希望有人在这里看过或参加过课程,这样我就可以得到一些帮助.我正处于使用提供的hdl语言构建ALU的阶段.我的问题是我无法正确编译芯片.当我尝试为ALU设置输出标志时,我收到错误.我认为问题是我不能下标任何中间变量,因为当我只是尝试根据一些随机变量(比如一个输入标志)将标志设置为true或false时,我没有得到错误.我知道问题不在于我尝试使用的芯片,因为我使用的是所有内置芯片.

到目前为止,这是我的ALU芯片:

/**
 * The ALU.  Computes a pre-defined set of functions out = f(x,y)
 * where x and y are two 16-bit inputs. The function f is selected 
 * by a set of 6 control bits denoted zx, nx, zy, ny, f, no.
 * The ALU operation can be described using the following pseudocode:
 *     if zx=1 set x = 0       // 16-bit zero constant
 *     if nx=1 set x = !x      // Bit-wise negation
 *     if zy=1 set …
Run Code Online (Sandbox Code Playgroud)

hdl alu nand2tetris

17
推荐指数
3
解决办法
9245
查看次数

定义=时的预处理程序错误

我正在尝试一些尴尬的预处理,并得出类似这样的东西:

#include <stdio.h>

#define SIX =6

int main(void)
{
  int x=6;
  int y=2;

  if(x=SIX)
    printf("X == 6\n");
  if(y=SIX)
    printf("Y==6\n");

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

gcc给了我错误:

test.c:在函数'main'中:
test.c:10:8:错误:'='之前的预期表达式
test test.c:12:8:错误:'='之前的预期表达式令牌

这是为什么?

c c-preprocessor

13
推荐指数
2
解决办法
559
查看次数

整数转换(缩小,扩展),未定义的行为

我很难以我能够轻易理解的方式找到关于这个主题的信息,所以我要求对我发现的内容进行审查.这只是关于转换和转换的.


在示例中,我将指的是:

(signed/unsigned) int bigger;
(signed/unsigned) char smaller;
Run Code Online (Sandbox Code Playgroud)
  1. 截断整数.(超大化>小)

    • 首先在MSB截断 以匹配大小.biggersmaller
    • 第二,根据较小的类型截断的结果转换为有符号/无符号.


    如果较大的值太大而不适合较小的类型,则会导致未定义的行为(纠正我).但是我的规则应该是在所有机器上工作(对此也是正确的),结果应该是可预测的.

  2. 加宽整数(小 - >更大)

    a)signed char- >signed int

    • 使用MSB(1或0)进行小写以匹配更大的大小
    • 转换为签名

    b)signed char- >unsigned int

    • 使用MSB(1或0)进行小写以匹配更大的大小.
    • 转换为无符号

    c)unsigned char- >signed int

    • 以0为前缀以匹配更大的尺寸
    • 转换为签名

    d)unsigned char- >unsigned int

    • 以0为前缀以匹配更大的尺寸
    • 转换为无符号

哪些未定义/未指定的行为,我没有提到可以弹出?

c integer type-conversion implicit-conversion

12
推荐指数
1
解决办法
4995
查看次数

试图为 nand2tetris 书构建一台 PC(计数器),但我在逻辑上遇到了一些问题

这是我的代码:

CHIP PC {
    IN in[16],load,inc,reset;
    OUT out[16];

    PARTS:
    Inc16(in = regout, out = incout);
    Mux16(a = regout, b = incout, sel = inc, out = incdecision);
    Mux16(a = incdecision, b = false, sel = reset, out = resetdecision);
    Mux16(a = regout, b = resetdecision, sel = load, out = loaddecision);
    Register(in = loaddecision, load = true, out = regout, out = out);
}
Run Code Online (Sandbox Code Playgroud)

基本上,从寄存器中出来的值是递增的,只有当 inc 为 1(通过 Mux 检查)时才被接受,然后通过另一个可能重置它的多路复用器,然后另一个多路复用器可能会或可能不会写入它,具体取决于载荷值。然后,任何从中产生的值(无论是更改的值还是来自旧寄存器的值)都被放入寄存器中。

我究竟做错了什么?

assembly hdl nand2tetris

5
推荐指数
1
解决办法
2903
查看次数

阻止用户将负数传递给接受unsigned int的函数

所以这是代码:

int create_mask(unsigned b, unsigned e)
{
  unsigned int mask=1;

  if(b<e || b<0 || e<0)
  {
    printf("Wrong values, starting bit can't be smaller than ending.\n");
    printf("Both got to be >= 0.\n");
    exit(EXIT_FAILURE);
  }
  while(b>0)
  {
    printf("%u\n", b);
    mask<<=1;
    if(b>e)
      mask|=1;
    b--;
  }

  return ~mask; /* negates mask for later purpose that is clearing corresponding bits */
}
Run Code Online (Sandbox Code Playgroud)

函数为某些位操作创建掩码,但应该采用两个无符号整数b和e,两者都是非负数.问题是如何防止用户输入负数?当用(-1,0)调用函数时,它启动循环,并且错误地退出.

c negative-number unsigned-integer

4
推荐指数
1
解决办法
4577
查看次数

按值集的大小排序HashMap

我想点一个HashMap:

Map<Integer, Set<Integer>> unsorted
Run Code Online (Sandbox Code Playgroud)

按值集的大小.我尝试按如下方式进行:

        Map<Integer, Set<Integer>> sorted = unsorted.entrySet().stream()
            .sorted(comparingInt(e->e.getValue().size()))
            .collect(toMap(
                    Map.Entry::getKey,
                    Map.Entry::getValue,
                    LinkedHashMap::new
            ));
Run Code Online (Sandbox Code Playgroud)

但是得到了一个错误

"无法从静态上下文引用非静态方法"

.我是Java 8 Streams的新手,显然缺少一些微不足道的东西 - 它是什么?

java hashmap java-stream

4
推荐指数
1
解决办法
77
查看次数