我使用node-ffi调用EnumPrintersA / EnumPrintersW函数来获取可从我的 PC 访问的本地打印机列表。
您应该创建一个缓冲区,该缓冲区将由 EnumPrinters 函数填充信息。
但您不知道所需的缓冲区大小。
在这种情况下,您需要执行EnumPrintersA / EnumPrintersW两次。
在第一次调用期间,该函数计算有关打印机信息的内存量,在第二次调用期间,该函数用有关打印机的信息填充缓冲区。
对于EnumPrinters函数的 Unicode 版本,打印机名称中的每个字母将在 Windows 中使用两个字符进行编码。
为什么第一次调用EnumPrintersW返回与第一次调用EnumPrintersA相同的所需内存量?
Unicode 字符串的长度是非 unicode 字符串的两倍,但所需的缓冲区大小相同。
var ffi = require('ffi')
var ref = require('ref')
var Struct = require('ref-struct')
var wchar_t = require('ref-wchar')
var int = ref.types.int
var intPtr = ref.refType(ref.types.int)
var wchar_string = wchar_t.string
var getPrintersA = function getPrinters() {
var PRINTER_INFO_4A = Struct({
'pPrinterName' : ref.types.CString,
'pServerName' : ref.types.CString,
'Attributes' : …Run Code Online (Sandbox Code Playgroud) 我正在尝试找到一种有效的(运行快速且编码简单)方法来执行该rbind.fill功能,但在基本 R 中。从我的搜索来看,似乎有很多库函数,例如smartbind、bind_rows和rbindon data.table,不过,如前所述,我需要一个基础 R 的解决方案。我发现使用:
df3 <- rbind(df1, df2[, names(df1)])
Run Code Online (Sandbox Code Playgroud)
从这个问题的答案来看,但它删除了列,而我希望NA添加额外的列。
如果此方法也适用于空的data.frame和已填充的方法,那就太好了,本质上只是设置返回已填充的方法。(这是为了简单起见,但如果不可能的话,如果变量为data.frame空,则将其替换为新变量并不困难。
我还希望它通过标记相同的列的列名称进行绑定。此外,第一个数据框可以比第二个数据框更大或更小,并且两者都可以具有另一个没有的列。
这是我想要的输入和输出示例(我只是编造了一些并不重要的数字)。
#inputs
a <- data.frame(aaa=c(1, 1, 2), bbb=c(2, 3, 3), ccc=c(1, 3, 4))
b <- data.frame(aaa=c(8, 5, 4), bbb=c(1, 1, 4), ddd=c(9, 9, 9), eee=(1, 2, 4))
#desired output
aaa bbb ccc ddd eee
1 2 1 NA NA
1 3 3 NA NA
2 3 4 NA NA
8 …Run Code Online (Sandbox Code Playgroud) 我想在我的ggplot下写一些笔记。我在 R 中做了我的数据分析,现在使用 markdown 包来写我的论文。这意味着我可以轻松地在 Markdown 脚本中包含变量。在那个脚本中,我创建了一些 ggplots 并想知道是否有一种简单的方法可以将这些解释写入情节。对于表格,它非常简单。%>% footnote(general="")诀窍。
情节有类似的东西吗?
我想知道是否有一个Rcpp函数将Rcpp::String数据类型作为输入并返回字符串的给定字符(按索引)。例如,提取字符串索引 0 处的字符。这相当于c++ 中标头中string::at的方法string。我写过这个:
#include <vector>
#include <string>
#include <Rcpp.h>
using namespace Rcpp;
typedef std::vector<std::string> stringList;
int SplitGenotypesA(std::string s) {
char a = s.at(0);
int b = a - '0';
return b;
}
Run Code Online (Sandbox Code Playgroud)
但不想在Rcpp::String和std::string类型之间进行转换。
我正在尝试解决黑客排名上的“一笔非常大的金额”挑战:https://www.hackerrank.com/challenges/a-very-big-sum/problem
\n在那里我必须对给出的数组中的所有数字求和,所以我想出了两个解决方案:
\n第一个解决方案
\nfunction aVeryBigSum(ar){\n let sum = 0;\n for(let i = 0; i < ar.length; i++){\n sum += i;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n第二种解决方案
\nfunction(ar){\n let sum = ar.reduce((accumulator, currentValue) => {\n accumulator + currentValue;\n });\n}\nRun Code Online (Sandbox Code Playgroud)\n但它们都不起作用,我不\xc2\xb4t知道为什么,我想也许我没有按照黑客等级希望我写的那样,但我不确定
\n我目前正在开发一个类来处理大的无符号整数。但是,我需要不完整的功能,即:
\nbi_uint+=bi_uint- 已经实施。没什么好抱怨的。bi_uint*=std::uint_fast64_t- 已经实施。没什么好抱怨的。bi_uint/=std::uint_fast64_t- 已实现,但工作速度非常慢,还需要两倍宽的类型uint_fast64_t。在测试用例中,除法比乘法慢35倍接下来,我将给出我的除法实现,它基于一个简单的长除法算法:
\n#include <climits>\n#include <cstdint>\n#include <limits>\n#include <vector>\n\nclass bi_uint\n{\npublic:\n using u64_t = std::uint_fast64_t;\n constexpr static std::size_t u64_bits = CHAR_BIT * sizeof(u64_t);\n using u128_t = unsigned __int128;\n static_assert(sizeof(u128_t) >= sizeof(u64_t) * 2);\n\n //little-endian\n std::vector<u64_t> data;\n\n //User should guarantee data.size()>0 and val>0\n void self_div(const u64_t val)\n {\n auto it = data.rbegin();\n\n if(data.size() == 1) {\n *it /= val;\n return;\n } \n \n …Run Code Online (Sandbox Code Playgroud) 我有以下数据集(每个变量可以取 1-10 之间的值):
factor <- c(1,2,3,4,5,6,7,8,9,10)
var_1 <- as.factor(sample(factor, 10000, replace=TRUE, prob=c(0.1,0.1,0.1,0.1,0.1, 0.1,0.1,0.1,0.1,0.1)))
var_2 <- as.factor(sample(factor, 10000, replace=TRUE, prob=c(0.1,0.1,0.1,0.1,0.1, 0.1,0.1,0.1,0.1,0.1)))
var_3 <- as.factor(sample(factor, 10000, replace=TRUE, prob=c(0.1,0.1,0.1,0.1,0.1, 0.1,0.1,0.1,0.1,0.1)))
var_4 <- as.factor(sample(factor, 10000, replace=TRUE, prob=c(0.1,0.1,0.1,0.1,0.1, 0.1,0.1,0.1,0.1,0.1)))
var_5 <- as.factor(sample(factor, 10000, replace=TRUE, prob=c(0.1,0.1,0.1,0.1,0.1, 0.1,0.1,0.1,0.1,0.1)))
my_data = data.frame(var_1, var_2, var_3, var_4, var_5)
head(my_data)
var_1 var_2 var_3 var_4 var_5
1 2 9 8 3 5
2 10 1 4 7 5
3 4 7 1 7 6
4 9 8 3 4 7
5 6 …Run Code Online (Sandbox Code Playgroud) 当我加载 tidyverse [或键入] 时,会出现一条警告消息,告诉我两个函数和tidyverse_conflicts()之间存在冲突。我们怎样才能避免这样的冲突呢?感谢您的答复!这是一个快照:dplyr::filter()dplyr::lag()

假设我的数据是df <- c("Author1","Reference1","Abstract1","Author2","Reference2","Abstract2","Author3","Reference3","Author4","Reference4","Abstract4").
这是一个系列,顺序为作者、参考文献和摘要。但在某些情况下,摘要数据会丢失。(在此示例中,缺少第三个摘要。)那么,当摘要丢失时,如何添加 NA 值来代替摘要呢?
换句话说,如果向量中的一个元素以单词“Reference”开头,但其下一个元素不以单词“Abstract”开头,我想在以“Reference”开头的元素后面添加一个 NA 值。结果向量应该是
result <- c("Author1","Reference1","Abstract1","Author2","Reference2","Abstract2","Author3","Reference3",NA,"Author4","Reference4","Abstract4")
How can I do it?
我已经尝试过 R 中的追加函数,但是为了使用它,我需要有要添加 NA 的元素的索引号。因此,每个 NA 元素都需要手动输入。
我需要一种方法来每 n 个字母分割一个字符串。
例如令s="QW%ERT%ZU%I%O%P"和n=3,我想获得"QW%E" "RT%Z" "U%I%O" "%P"。
如您所见,除法中不考虑特殊字符“%”。
我尝试过
strsplit(s, "(?<=.{10})(?=.*\\%)", perl = TRUE)[[1]]
Run Code Online (Sandbox Code Playgroud)
但我找不到办法获得我想要的东西。