为什么我的R功能不会返回或打印图?代码如下.除了情节之外,所有代码似乎都能正常工作.无论我做什么,我都无法在调用函数时让R创建绘图.环顾四周,我找不到任何理由这样做不起作用.
powerc.fun <- function(n,sigma,r){
a <- 0.05
d <- seq(-20,20,2)
power <- rep(NA,length(d))
p.lab <- rep(NA,length(d))
for (j in 1:length(d)){
mu1 <- 110
mu2 <- mu1-d[j]
reject <- rep(NA,r)
for (i in 1:r){
sample1 <- rnorm(n,mu1,sigma)
sample2 <- rnorm(n,mu2,sigma)
sample.t <- t.test(sample1,sample2)
p.val <- sample.t[3]
reject[i] <- p.val<a
power[j] <- sum(reject)/length(reject)
p.lab[j] <- paste('d=',d[j],sep='')
}}
d.power <- cbind(d,power)
return(d.power)
p.plot <- plot(d.power[,1], d.power[,2], type="l", xlab=bquote(H[a]), ylab="Power", main="Power Calculations for Two Sample T Test")
print(p.plot)
return(p.plot)
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我在Mac OS(Mountain Lion)上从Unix shell脚本运行MATLAB脚本时遇到了一些麻烦.
我知道如何从shell调用MATLAB脚本,这很好.但是,问题是我希望我的shell脚本在MATLAB运行完毕后再调用另一个程序.但是当MATLAB程序完成时,shell就会"卡住".也就是说,它不会继续执行shell中的其他函数,并且终端窗口卡在MATLAB环境中而不是将控制权返回给sh.
我该怎么办?这是我的shell的副本:
#! /bin/sh
echo "Please make sure the network cable is plugged in"
echo "(then press return to continue)"
sudo mv /System/Library/CoreServices/Dock.app /System/Library/CoreServices/Dock.app.bak
killall Dock
/Applications/MATLAB_R2008a/bin/matlab -nodesktop -r "run Documents/MATLAB/BLS/BLS"
sudo mv /System/Library/CoreServices/Dock.app.bak /System/Library/CoreServices/Dock.app
# OTHER COMMANDS AFTER HERE CALLING OTHER PROGRAMS ...
Run Code Online (Sandbox Code Playgroud)
两个"sudo mv"命令只是在执行MATLAB时使Dock不可见,并在MATLAB完成后将其恢复.
第一个命令工作正常,使Dock不可见,然后运行MATLAB.但是,当MATLAB完成运行时,它不会继续使用shell的其余部分.终端在MATLAB中"卡住".我试图摆弄命名管道等,但我无法让它们中的任何一个工作.
在MATLAB完成后如何让它继续执行shell脚本?
我搜索了网站,但我找不到任何解决这个问题的方法.这是我想要完成的一件非常简单的事情,但我真的无法弄清楚如何去做.
我有一个图像目录.我正在进行一项实验,在滑块上,人们将评估两个图像相互关联的程度.在MATLAB中编程滑块部分很容易.但是,我在弄清楚如何使图像工作时遇到了问题.我希望目录中的两张图片随机出现在屏幕上,这样在实验结束时,每个可能的图像对都会被评级.
所以如果图像是:
dog
cat
mouse
hat
Run Code Online (Sandbox Code Playgroud)
我想要:
dog cat
dog mouse
dog hat
cat mouse
cat hat
mouse hat
Run Code Online (Sandbox Code Playgroud)
如何让MATLAB执行此操作?
首先,我无法让它首先显示随机图像.我的脚本是这样的,但它不起作用:
dfiles = d(~[d.isdir]);
genRandNum = randperm(length(dfiles));
filename = dfiles(genRandNum(i)).name;
imageName = fullfile('Desktop', 'SEMREL', 'Pictures', filename);
imshow(imageName, 'Parent');
Run Code Online (Sandbox Code Playgroud)
但是一旦我开始工作,如何让它在屏幕上彼此相邻显示两个图像?我如何对随机生成进行加权,以便我只获得一次图像对?如果我只是告诉它不要重复不起作用的图像,因为每个单独的图像都必须与其他几个图像配对.
救命?我真的找不到办法做到这一点.
我无法弄清楚如何做到这一点.我在R中有一个data.frame.它看起来像这样:
Scores <- read.table(text = "
ID Test1 Test2 Test3 Final
1 Student1 20 23 21 48
2 Student2 16 15 18 36
3 Student3 25 20 22 40
4 Student4 14 19 18 42
5 Student5 10 15 14 30
")
Run Code Online (Sandbox Code Playgroud)
我想要的是创建一个新的数据对象,其中包含每个测试的值范围,包括final.所以它看起来像这样:
result <- read.table(text = "
min max
Test1 10 25
Test2 15 23
Test3 14 22
Final 30 48
")
Run Code Online (Sandbox Code Playgroud)
老实说,无论是仅列出最大值和最小值,还是实际计算差值,我都无所谓.我只是无法找到实现这一点的方法,这不是一种不必要的复杂.我知道我可以手动和单独拉出列,但必须有一些更好的方法来做到这一点.有什么涉及by()
或tapply()
?但我无法让他们工作.
有任何想法吗?
好吧,这就像第五次我不得不提出这个问题,但仍然没有人能够给我一个答案或解决方案.但是我们又来了......
我想运行一个非常简单的小MATLAB程序.它只是随机显示目录中的图像.这是我的代码:
files = dir(fullfile(matlabroot,'toolbox','semjudge',bpic,'*.png'));
nFiles = numel(files);
combos = nchoosek(1:nFiles, 2);
index = combos(randperm(size(combos, 1)), :);
picture1 = files(index(nRep,1)).name;
picture2 = files(index(nRep,2)).name;
image1 = fullfile(matlabroot,'toolbox','semjudge',bpic,picture1);
image2 = fullfile(matlabroot,'toolbox','semjudge',bpic,picture2);
subplot(1,2,1); imshow(image1);
subplot(1,2,2); imshow(image2);
Run Code Online (Sandbox Code Playgroud)
我尝试了几种不同的迭代,包括用"randsample"替换"nchoosek".
但它不起作用!每次运行程序时,脚本都以相同的顺序运行相同的图像文件.它为什么这样做?它就像它第一次运行它时随机化了图像文件,但现在它只按顺序运行它们,而不是每次运行脚本时随机化它们.
有人可以帮我这个吗?