使用具有相同名称的基本R中的函数的变量名称似乎通常被认为是不良的编程习惯.
例如,写作很有诱惑力:
data <- data.frame(...)
df <- data.frame(...)
Run Code Online (Sandbox Code Playgroud)
现在,该函数data
在函数df
计算f密度函数时加载数据集.
同样,写作很有诱惑力:
a <- 1
b <- 2
c <- 3
Run Code Online (Sandbox Code Playgroud)
这被认为是不好的形式,因为该函数c
将组合其参数.
但是:在R函数的主力中lm
,计算线性模型data
用作参数.换句话说,data
成为lm
函数内部的显式变量.
那么:如果R核心团队可以对变量和函数使用相同的名称,那么什么阻止了我们凡人呢?
答案不是R会混淆.请尝试以下示例,其中我明确指定了具有名称的变量c
.R根本不会对变量和函数之间的区别感到困惑:
c("A", "B")
[1] "A" "B"
c <- c("Some text", "Second", "Third")
c(1, 3, 5)
[1] 1 3 5
c[3]
[1] "Third"
Run Code Online (Sandbox Code Playgroud)
问题:具有与基本R函数同名的变量究竟是什么问题?
有没有方便的方法来自动解析传递给R脚本的命令行参数?
像perl这样的东西Getopt::Long
?
假设我有一个R脚本:
library('nnet')
something <- runif(50);
print(something)
Run Code Online (Sandbox Code Playgroud)
当我从命令行运行此脚本时,它会打印:
> library('nnet')
> something <- runif(5);
> print(something)
[1] 0.04665518 0.93574275 0.96387299 0.07410239 0.92834019
Run Code Online (Sandbox Code Playgroud)
我希望它只打印:
[1] 0.04665518 0.93574275 0.96387299 0.07410239 0.92834019
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何做到这一点.sink("/ dev/null")没有做任何事情,手动重定向stderr没有做任何事情,我找不到任何有用的信息.
总之,我在RStudio中的'input_file1.txt'上使用我的脚本'Graphs.R'来创建一个Rmd然后我编织成html.我想自动执行此过程以在命令行上运行更多文件.
到目前为止,我可以使用以下命令在命令行上运行Rscript:
Rscript Graphs.R input_file1.txt
我也知道我可以使用以下命令创建.RMD文件:
Rscript -e rmarkdown :: render(Graphs.R)
但是,我想做以下事情:
Rscript -e rmarkdown :: render('Graphs.R input_file1.txt','output_file.Rmd')
有什么想法如何做到这一点?
我正在尝试使用
var <- as.numeric(readline(prompt="Enter a number: "))
Run Code Online (Sandbox Code Playgroud)
然后在计算中使用它。
在 RStudio 中运行时工作正常,但我需要能够从 Windows 10 中的命令行传递此输入我正在使用带有单行的批处理文件
Rscript.exe "C:\My Files\R_scripts\my_script.R"
Run Code Online (Sandbox Code Playgroud)
当它到达用户输入部分时,它会冻结并且不提供预期的输出。
我试图通过命令行将多个文件路径参数传递给Rscript,然后可以使用参数解析器进行处理.最终我会想要这样的东西
Rscript test.R --inputfiles fileA.txt fileB.txt fileC.txt --printvar yes --size 10 --anotheroption helloworld -- etc...
Run Code Online (Sandbox Code Playgroud)
通过命令行传递,并在解析时将结果作为R中的数组
args$inputfiles = "fileA.txt", "fileB.txt", "fileC.txt"
Run Code Online (Sandbox Code Playgroud)
我尝试了几种解析器,包括optparse和getopt,但它们似乎都不支持这种功能.我知道argparse确实如此,但它目前不适用于R版本2.15.2
有任何想法吗?
谢谢
我在JAVA中有两个4*4矩阵,其中一个矩阵包含观察计数和其他预期计数.
我需要一种自动的方法来计算这两个矩阵之间的卡方统计量的p值; 但是,就我所知,JAVA没有这样的功能.
我可以通过将两个矩阵读入R作为.csv文件格式,然后使用chisq.test函数计算卡方和p值,如下所示:
obs<-read.csv("obs.csv")
exp<-read.csv("exp.csv")
chisq.test(obs,exp)
Run Code Online (Sandbox Code Playgroud)
其中.csv文件的格式如下:
A, C, G, T
A, 197.136, 124.32, 63.492, 59.052
C, 124.32, 78.4, 40.04, 37.24
G, 63.492, 40.04, 20.449, 19.019
T, 59.052, 37.24, 19.019, 17.689
Run Code Online (Sandbox Code Playgroud)
给定这些命令,R将给出格式的输出:
X-squared = 20.6236, df = 9, p-value = 0.01443
Run Code Online (Sandbox Code Playgroud)
其中包括我正在寻找的p值.
有谁知道自动化过程的有效方法:
1)将我的矩阵从JAVA输出到.csv文件中2)将.csv文件上传到R 3)将.csv文件上的chisq.test调用到R中4)将输出的p值返回JAVA?
谢谢你的帮助....
可能重复:
如何从R脚本中读取命令行参数?
我有一个R脚本,我希望能够提供几个命令行参数(而不是代码本身的硬编码参数值).该脚本在linux上运行.
我无法找到如何在命令行Bash上读取R.script.
sh文件
cd `dirname $0`
/usr/lib64/R/bin/R --vanilla --slave "--args input='$1' input2='$2' output='$3'" file=/home/lvijfhuizen/galaxy_dist/tools/lisanne/partone.R $3.txt
Run Code Online (Sandbox Code Playgroud)
R档
args <- commandArgs()
file <- read.csv(args[8],head=TRUE,sep="\t")
annfile <- read.csv(args[9],head=TRUE,sep="\t")
Run Code Online (Sandbox Code Playgroud) 我在一个文件夹中有多个文件,我想使用R对每个文件执行相同的操作,而不是每次只更改脚本中的文件名.特别是,我有26个.csv文件,我需要单独识别重复的条目.任何有关最佳方法的建议都表示赞赏.
r ×9
command-line ×2
argparse ×1
arguments ×1
automation ×1
bash ×1
chi-squared ×1
function ×1
java ×1
optparse ×1
parsing ×1
r-faq ×1
r-markdown ×1
statistics ×1
variables ×1
windows ×1