小编The*_*kel的帖子

将 RStudio 快捷方式更改为“插入部分...”

为了保持代码整洁,我喜欢使用代码部分。在 Windows 上,新代码段的快捷方式是ctrl+shift+R,在 MAC 上是Cmd+shift+R。各部分的格式是

# <label> ---------------------------------------
Run Code Online (Sandbox Code Playgroud)

但是当我用来knitr编写文档并包含 .R 文件中的代码时,这种格式knitr与标签的预期不匹配。

例如当使用

read_chunk("foo.R")
<<label-a>>=
@
Run Code Online (Sandbox Code Playgroud)

那么label-ain之前foo.R必须至少有四个破折号-- 例如

## ---- label-a ----
1+2
rnorm(2)
Run Code Online (Sandbox Code Playgroud)

因此,如果能够更改 RStudio 中的键盘快捷键,以便它创建一个具有以下格式格式的代码部分,那就太好了:

## ---- <label> ----
Run Code Online (Sandbox Code Playgroud)

这可能吗?

rstudio knitr

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

解析和替换如何工作以允许访问对象名称?

我的问题是关于以下代码:

myfunc <- function(v1) {
    deparse(substitute(v1))
}

myfunc(foo)
[1] "foo"
Run Code Online (Sandbox Code Playgroud)

我在 R 中输入?deparse?substitute并获得以下结果:

deparse = Turn unevaluated expressions into character strings.
Run Code Online (Sandbox Code Playgroud)

substitute = returns the parse tree for the (unevaluated) expression expr, 
substituting any variables bound in env.
Run Code Online (Sandbox Code Playgroud)

我似乎不太懂这种语言。有人能够简化这些描述的技术方面,以便我能够开始理解这两个函数如何协同工作,让我们能够做一些很酷的事情,比如访问对象的变量名?

r

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

SAS 替换所有列中的字符

我有一个 SAS 数据集,必须导出到 .csv 文件。我有以下两个相互矛盾的要求。

  • 我必须使用分号作为 .csv 文件中的分隔符。

  • 一些字符变量是从公式中手动输入的字符串,因此它们可能包含分号

我对上述问题的解决方案是转义分号或用逗号替换它。

我怎样才能以一种良好、干净和有效的方式tranwrd在整个数据集上使用?


我的尝试:

对于每个变量,tranwrd(.., ";", ",")对数据集中的变量使用该函数。更新数据集并循环所有变量。然而,对于半大型数据集来说,这自然是一种非常低效的方法,因为我必须为每个变量执行一个数据步骤。它的代码相当难看,因为我必须通过几个步骤才能获取变量名称,但效率低下确实是最糟糕的。

data test;
    input w $ c b  d  e $ f $;
    datalines4;
Aaa;; 50 11 1 222 a;s                                        
Bbb 35 12 2 250 qw                                        
Comma, 75 13 3 foo zx                                        
;;;;
run;

* Get the variable names;
proc contents data=test out=vars(keep=name type varnum) order=varnum noprint;
run;
* Sort by variable number;
proc sort data=vars; …
Run Code Online (Sandbox Code Playgroud)

sas

2
推荐指数
1
解决办法
5139
查看次数

在 sysget 调用的输出中屏蔽与号

要获取当前 SAS 程序的文件名,我们可以编写

%put %sysget(SAS_EXECFILEPATH);
Run Code Online (Sandbox Code Playgroud)

我很不幸,有人曾经创建了一个目录,在路径中包含一个&符号(哎呀!)。让我们创建一个示例文件夹C:\temp&other并将我们的test.sas程序存储在该文件夹中。

现在,我的问题是:

是否可以屏蔽输出%sysget(SAS_EXECFILEPATH)以避免 SAS 尝试解析宏变量&other

简单的解决方案是更改路径名,但不幸的是事情并不总是那么容易,我不允许更改文件夹名称。


我的尝试:我尝试过的所有nr功能都没有帮助我,因为它们屏蔽了%&. 我尝试了以下(缩进的行是 SAS 日志输出)。请注意,%NRQUOTE输出与“裸”调用相同。

%put %sysget(SAS_EXECFILEPATH); 
    /* WARNING: Apparent symbolic reference OTHER not resolved. */
    /* C:\temp&other\test.sas */

%put %nrstr(%sysget(SAS_EXECFILEPATH));
    /* %nrstr(%sysget(SAS_EXECFILEPATH)) */

%put %nrquote(%sysget(SAS_EXECFILEPATH));
    /* WARNING: Apparent symbolic reference OTHER not resolved. */
    /* C:\temp&other\test.sas */

%put %superq(%sysget(SAS_EXECFILEPATH));
    /* WARNING: Apparent symbolic reference OTHER not resolved.*/
    /* ERROR: Invalid symbolic variable name …
Run Code Online (Sandbox Code Playgroud)

sas

2
推荐指数
1
解决办法
140
查看次数

R中的函数总和

我在R中有一个函数,我希望用不同的值取这个函数的总和.但是,由于我有一个中断条件(由一个if语句做出),我不能明确地这样做:

F<- function(x) if(x<5) 1 else 0
sum(F(seq(1,10,1))
#[1] 1
#Warning message:
#In if (x < 5) 1 else 0 :
#  the condition has length > 1 and only the first element will be used
Run Code Online (Sandbox Code Playgroud)

所以它试图完成函数的序列而不是序列总和.我希望避免for循环,因为这可能使长代码非常混乱; 特别是为了避免丑陋的嵌套for循环.

我该怎么做?

r

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

标签 统计

r ×2

sas ×2

knitr ×1

rstudio ×1