R有很多东西可以做得更好.因此,我试图设置我的系统,以便我可以使用[submit/R;]和[endsubmit;]命令从SAS内执行R命令.但是我需要一些帮助才能正确设置我的配置文件来执行此操作.
我检查了我的系统是否设置为读取R语言(下面的代码).
proc options option=rlang;
run;
Run Code Online (Sandbox Code Playgroud)
我的日志中有以下内容:
SAS (r) Proprietary Software Release 9.3 TS1M0
NORLANG Do not support access to R language interfaces
Run Code Online (Sandbox Code Playgroud)
这意味着我需要在配置文件中添加-RLANG选项.我做到了 下面是我的配置文件的示例(C:\ Program Files\SASHome\SASFoundation\9.3\sasv9.cfg):
-RLANG
-config "C:\Program Files\SASHome\SASFoundation\9.3\nls\en\sasv9.cfg"
Run Code Online (Sandbox Code Playgroud)
(注意:-RLANG必须高于配置参考,才能正确识别.)
在重新打开企业指南并重新运行上面的proc选项代码之后,在我的日志中生成结果:
SAS (r) Proprietary Software Release 9.3 TS1M0
RLANG Support access to R language interfaces
Run Code Online (Sandbox Code Playgroud)
我正在使用SAS 9.3和R 2.15.2,所以根据这个(http://blogs.sas.com/content/iml/2013/09/16/what-versions-of-r-are-supported-by- sas /)这些版本是兼容的.
但是,我通过企业指南4.3(我更喜欢组织)执行SAS.看来,企业指南可能需要配置文件中的一些额外内容,以允许R运行并识别它在我的计算机上的位置.
例如,我尝试运行以下代码:
Proc iml;
submit /R;
directory <- "C:\\Data\\Filepath"
FILEpattern1 <- "Fall 12-13.xlsx"
setwd(directory)
filenames1 <- list.files(pattern=FILEpattern1)
endsubmit;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
15 Proc iml;
NOTE: IML …Run Code Online (Sandbox Code Playgroud) 在过去的一年里我使用过R来做各种各样的事情,但是由于可用的软件包和功能的数量,我仍然是一个初学者.我相信R会允许我用最少的代码做我想做的事,但我很挣扎.
我有大约一百个不同的excel文件,其中包含学生的数据.每个excel文件代表不同的学校,但包含相同的变量.我需要:
- 从Excel导入数据到R中
- 将变量添加到包含文件名的每个文件
- 合并所有数据(添加观察/行 - 不需要匹配变量)
我需要为多组数据执行此操作,因此我尝试使其尽可能简单且易于复制.
行1 标题
行2 StudentID VAR1 VAR2 VAR3 VAR4 VAR5
行3 11234 1 2011/9/8 343 159-167 32
行4 11235 2 2011/9/16 112 152-160 12
行5 11236 1 2011/9/8 325 164 -171 44
第1行没有意义,第2行包含变量名.文件具有不同的行数.
起初我只是尝试从excel导入数据.使用XLSX包,这很好用:
dat <- read.xlsx2("FILENAME.xlsx", sheetIndex=1,
sheetName=NULL, startRow=2,
endRow=NULL, as.data.frame=TRUE,
header=TRUE)
Run Code Online (Sandbox Code Playgroud)
接下来,我把重点放在搞清楚如何合并文件(也认为这是我应该的文件名变量添加到数据文件).这是我被卡住的地方.
setwd("FILE_PATH_TO_EXCEL_DIRECTORY")
filenames <- list.files(pattern=".xls")
do.call("rbind", lapply(filenames, read.xlsx2, sheetIndex=1, colIndex=6, header=TRUE, startrow=2, FILENAMEVAR=filenames));
Run Code Online (Sandbox Code Playgroud)
我把我的目录,使所有的文件夹中的Excel文件名列表,然后尝试使用变量作为文件名,以将它们合并在一个语句.
当我这样做时,我收到以下错误:
data.frame(res,...)中的错误:参数意味着行数不同:616,1,5 …
我正在使用 ggplot 创建一个图形,并想使用箭头来指示我的误差线超出定义轴的位置。例如,我想最终得到一个如下所示的图形:

我希望 R 确定哪些下限超出了定义的图表范围,并添加一个漂亮的箭头(而不是我丑陋的油漆添加的箭头)。
我知道必须有办法做到这一点。有任何想法吗?这是我的代码,用于制作上面的图表,而无需手动添加箭头:
#generate data
myData<-data.frame(ALPHA=round(runif(60,.5,.8),2),
error=round(runif(60,.05,.15),2),
formN=rep(1:5,12),
Cat=c(rep("ELL",30),rep("SWD",30)),
grade=rep(c(rep(3,5),rep(4,5),rep(5,5),rep(6,5),rep(7,5),rep(8,5)),2)
)
myData$LCL<-myData$ALPHA-myData$error
myData$UCL<-myData$ALPHA+myData$error
#set error outside of range for example
myData[myData$Cat=="ELL" & formN==1,"LCL"]<-0
library(ggplot2)
ggplot(myData, aes(x=formN, y=ALPHA, colour=Cat)) +
geom_errorbar(aes(ymin=LCL, ymax=UCL), width=.4, position=position_dodge(.5)) +
geom_point(position=position_dodge(.5), size=2) +
labs(x="Form", y="Alpha", title="TITLE") +
geom_line(position=position_dodge(.5), size=.3) +
coord_cartesian(ylim=c(.3, 1)) +
facet_wrap(~grade, ncol=3)
Run Code Online (Sandbox Code Playgroud)