我是一个名为vampire(http://github.com/richard-evans/vampire)的开源科学代码的作者,并且计算密集型意味着代码性能的任何改进都可以显着增加可以完成的研究.此代码的典型运行时可能是数百个核心小时,因此我一直在寻找改进代码性能关键部分的方法.但是,我有点陷入以下相对无害的代码中,这占了运行时的40%左右:
for (int atom = start_index; atom < end_index; atom++){
register double Hx = 0.0;
register double Hy = 0.0;
register double Hz = 0.0;
const int start = atoms::neighbour_list_start_index[atom];
const int end = atoms::neighbour_list_end_index[atom] + 1;
for (int nn = start; nn < end; nn++){
const int natom = atoms::neighbour_list_array[nn];
const double Jij = atoms::i_exchange_list[atoms::neighbour_interaction_type_array[nn]].Jij;
Hx -= Jij * atoms::x_spin_array[natom];
Hy -= Jij * atoms::y_spin_array[natom];
Hz -= Jij * atoms::z_spin_array[natom];
}
atoms::x_total_spin_field_array[atom] += Hx;
atoms::y_total_spin_field_array[atom] += Hy; …Run Code Online (Sandbox Code Playgroud) 我希望我的knitr报告中的所有数字都默认格式化为:
format(num, digits = 2, big.mark = " ", decimal.mark = ",")
Run Code Online (Sandbox Code Playgroud)
将数字的数量默认为2,将小数点标记为逗号很简单,我只需要options(digits = 2, OutDec = ",")在我的第一个R块中设置.但是,我不知道如何" "以该格式设置千位分隔符(或其他任何内容).我也试过调整opts_chunk,但无法让它工作.
当然,我试图避免必须插入format()每个输出,内联或其他内容.毕竟,更聪明的格式化是让我从Sweave开始编织的一件事.
如何在knitr上设置默认的千位分隔符?
在以下示例中
x <- data.frame(code = 7:9, food = c('banana', 'apple', 'popcorn'))
y <- data.frame(food = c('banana', 'apple', 'popcorn'),
isfruit = c('fruit', 'fruit', 'not fruit'))
Run Code Online (Sandbox Code Playgroud)
我想这样做x <- merge(x, y),但问题是merge()重新排列列,以便by列(食物)首先出现.如何防止这种情况并且merge(x, y)使用x的相同列顺序并且只插入新变量(isFruit)作为第三列(即"code,food,isFruit"而不是"food,code,isFruit")?
我试过这个,但无济于事:
merge(x, y, sort = F)
Run Code Online (Sandbox Code Playgroud)
我的解决方法是在之后执行此操作
x <- x[c(2, 1, 3)]
Run Code Online (Sandbox Code Playgroud) 我有一个数据框,每行代表一个人.该数据框有两个变量:年龄和年份.我想制作一张每年平均年龄的表格.我该怎么做?
我能想到的最好的是xtabs(age ~ year, dataframe),但这给了我每年的年龄总和.
假设我有以下server.R文件闪亮:
shinyServer(function(input, output) {
output$plot <- renderPlot({
data2 <- data[data$x == input$z, ] # subsetting large dataframe
plot(data2$x, data2$y)
})
output$table <- renderTable({
data2 <- data[data$x == input$z, ] # same subset. Oh, boy...
summary(data2$x)
})
})
Run Code Online (Sandbox Code Playgroud)
为了不必data2 <- data[data$x == input$z, ]在每个渲染调用中运行,我该怎么办?如果我执行以下操作,我得到一个"类型'对象'的对象'不是子集"错误:
shinyServer(function(input, output) {
data2 <- reactive(data[data$x == input$z, ])
output$plot <- renderPlot({
plot(data2$x, data2$y)
})
output$table <- renderTable({
data2 <- data[data$x == input$z, ]
summary(data2$x)
})
})
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
说我有以下数据:
require(ggplot2)
set.seed(123)
data <- data.frame(x = sample(1:20, 100, replace = TRUE))
Run Code Online (Sandbox Code Playgroud)
我想创建一个点图data$x,所以这就是我所做的:
ggplot(data, aes(x)) +
geom_dotplot(binwidth = 1) +
scale_x_continuous(breaks = seq(1, 20, 1)) +
scale_y_continuous(breaks = NULL)
Run Code Online (Sandbox Code Playgroud)
这给了我这个:

我想摆脱那些垂直网格线,所以我添加theme(line = element_blank())到我的ggplot语句.问题是命令也消除了我想保留的刻度线.如何在保持各自的刻度的同时隐藏网格线?
我还想知道如何更改网格线,以便它们每次都被绘制1:20,而不是每0.5个标记.
我已经找到了那些答案,?title()并?geom_dotplot尝试了几件事,但无济于事.感谢帮助!
我有一个.RData文件可以在我的Linux(UTF-8)机器上读取,但我知道该文件是在Latin1中,因为我自己在Windows上创建了它们.不幸的是,我无法访问原始文件或Windows机器,我需要在我的Linux机器上读取这些文件.
要读取Rdata文件,通常的过程是运行load("file.Rdata").诸如read.csv有一个encoding参数的函数可以用来解决这类问题,但load没有这样的东西.如果我尝试load("file.Rdata", encoding = latin1),我只是得到这个(预期)错误:
加载错误("file.Rdata",encoding ="latin1"):unused argument(encoding ="latin1")
我还可以做些什么?我的文件加载了包含重音的文本变量,这些重音在UTF-8环境中打开时会被破坏.
我正在使用R markdown来创建PDF R课程.我想插入一个如下所示的测验:
---
output: pdf_document
---
What is the class of the following R object?
1. `pi`
```{r}
class(pi)
```
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,使用以下内容创建PDF:

但是,我希望读者不要轻易获得答案.这些是我迄今为止实现这一目标的想法:
>!stackoverflow代码的东西来隐藏剧透(不知道R markdown上是否有这样的功能);对我来说,第三个想法似乎是最优雅的方式,但我不知道如何实现它.我已经采取了看看如何隐藏代码RMarkdown,与选项来查看它,http://yihui.name/knitr/options/和https://www.ctan.org/pkg/exam?lang=en,但没有找到我能用的东西.
正如您所看到的,我不介意解决方案是否要求用户在计算机上阅读文档,但如果我能找到一个也适用于文档的打印版本的解决方案,那就太棒了.
我正在尝试按人口和日期排序这个数据框,所以我正在使用order()和rank()函数:
> df <- data.frame(idgeoville = c(5, 8, 4, 3, 4, 5, 8, 8),
date = c(rep(1950, 4), rep(2000, 4)),
population = c(500, 450, 350, 350, 650, 500, 500, 450))
> df
idgeoville date population
1 5 1950 500
2 8 1950 450
3 4 1950 350
4 3 1950 350
5 4 2000 650
6 5 2000 500
7 8 2000 500
8 8 2000 450
Run Code Online (Sandbox Code Playgroud)
随着ties.method = "first"我没有问题,最后我生产这种数据帧:
idgeoville date population rank …Run Code Online (Sandbox Code Playgroud) 假设我在一个 Excel 单元格中有以下文本字符串:
John John John Mary Mary
Run Code Online (Sandbox Code Playgroud)
我想在另一个单元格上创建一个公式(所以没有菜单功能或 VBA,请)
John Mary
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
到目前为止我尝试过的是在互联网上搜索有关该问题的内容,我所能找到的只是涉及 Excel 的内置重复删除或涉及countif 和替换"". 我还查看了 Excel 函数列表,尤其是“文本”类别中的函数列表,但找不到任何可以在一个单元格上完成的有趣内容。