我通过以下方式创建列表列表:
key<-112233
list1 <- list(a = 2, b = 3)
list2 <- list(c = "a", d = "b")
mylist <- list(list1, list2)
Run Code Online (Sandbox Code Playgroud)
然后,我想在第二个列表中添加一个新对,但我想键入key以前定义的值.当我做
mylist[[2]]$key<-6
Run Code Online (Sandbox Code Playgroud)
我明白了
$c
[1] "a"
$d
[1] "b"
$key
[1] 6
Run Code Online (Sandbox Code Playgroud)
而不是
$c
[1] "a"
$d
[1] "b"
$112233
[1] 6
Run Code Online (Sandbox Code Playgroud)
我尝试使用get或许多可能的其他组合使用[]或[[]]似乎没有任何工作.请指教.
我正在使用Windows虚拟机,我同时安装了R和RStudio,我正在尝试更改R写入临时文件的目录.
当我启动R时,我尝试更改临时目录,然后关闭R.当我重新启动R并尝试tempdir()它仍然显示旧目录时,好像什么也没发生.但是,如果在尝试更改RI中的临时目录后启动RStudio而不是重新启动R,那么当我tempdir()在RStudio中尝试时,它会显示我在R中设置的新/更新目录.这怎么可能?怎么了?为什么只有RStudio响应我更改的临时目录而不是R,即使这是我正在更改目录的地方?
给定一列数据(类型为39600.432,39600.433等),我想删除数字的整数部分,只保留小数(将39600.432转换为432,将39600.433转换为433).我怎样才能做到这一点?
我正在Perl中编写一个脚本,我希望.csv在给定目录中的所有文件上运行.文件的名称是:CCCC0.csv, CCCC1.csv, ..., CCCC198.csv.但是,我希望Perl首先在文件CCCC0.csv上运行脚本,而不是在CCCC1.csv等...所以,基本上,根据文件名末尾的数字的增加值.如果我写:
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
my $file;
my @files = <*.csv>;
my @orderedfiles = sort @files;
for $file (@orderedfiles) {
... do stuff
}
Run Code Online (Sandbox Code Playgroud)
如果我写的话,它首先运行CCCC100.csv而不是运行CCCC11.csv
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
my $file;
my @files = <*.csv>;
my @orderedfiles = sort { substr($a, 4) <=> substr($b, 4) } @files;
for $file (@orderedfiles) {
... do stuff
}
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误,告诉我我没有订购数字(我认为他不明白它是4个字符之后的数字而不是另一个字符.)我看过Stackoverflow或perlmonks上的无数问题处理排序但我无法找到我的问题的答案.
编辑:我正在使用Windows机器.
我将R中的一些数据存储在data.frame中,如下所示:
time value
53 5
55 5
59 7
61 9
79 6
118 11
200 5
Run Code Online (Sandbox Code Playgroud)
我希望按时间提取数据,制作60秒的桶(时间以秒为单位).但是,我想要做的是创建一个新的data.frame,它只保留每个存储桶的第一个和最后一个条目.我知道我可以通过循环轻松完成这项工作但我的问题是如何告诉R找到存储桶的第1个和最后一个元素.
我想在Perl中创建一个数组,其中包含两个变量的值,并且两个变量中的一个将具有从文件中读取的值.
在简化的情况下,我怎么能创建一个名称的数组CCP时,P和CC是两个独立的变量?
到目前为止,我已加入两个使用:
my $body='CC';
my $letter='P';
my $joined=$body . "$venue";
Run Code Online (Sandbox Code Playgroud)
但我想实际创建一个名字的数组@CCP.我的想法是,我将从数据文件中读取不同的字母,然后通过将"CC"连接到从文件读取的字母来创建将具有名称的数组.
我正在处理Perl中哈希的哈希,我遇到了一些问题.在我的代码运行一段时间后,它会生成一个散列哈希,看起来像这样:
my %book = (
+1 => {
27 => 100,
24 => 1000,
},
-1 => {
30 => 200,
31 => 500,
}
);
Run Code Online (Sandbox Code Playgroud)
在处理了一些更多的数据之后,代码最终通过使用以下代码行删除了两个哈希条目:
delete $book{-1}{30};
delete $book{-1}{31};
Run Code Online (Sandbox Code Playgroud)
因此,哈希应该是半空的.但是,稍后在我的代码中运行以下if语句:
if ((defined $book{+1}) && (defined $book{-1})){
do A
}else{
do B
}
Run Code Online (Sandbox Code Playgroud)
我的代码最终做了"事物A"而不是"事物B",他应该这样做,因为哈希的"-1"侧已被删除.这怎么可能?而且,最重要的是,如何解决这个问题?
我写了一个随机过程模拟器,但我想加快它,因为它很慢.
模拟器的主要部分是一个for循环,我想重写为foreach%%dopar%.
我试过用简化的循环这样做,但我遇到了一些问题.假设我的for循环看起来像这样
library(foreach)
r=0
t<-rep(0,500)
for(n in 1:500){
s<-1/2+r
u<-runif(1, min = 0, max = 1)
if(u<s){
t[n]<-u
r<-r+0.001
}else{r<-r-0.001}
}
Run Code Online (Sandbox Code Playgroud)
这意味着在每次迭代时我都会更新和的值,r并且s在两个结果中的一个中填充我的向量t.我已经尝试了几种不同的方式将它重新编写为foreach循环,但似乎每次迭代我的值都没有得到更新,我得到一些非常奇怪的结果.我尝试过使用return但似乎没有用!
这是我想出的一个例子.
rr=0
tt<-foreach(i=1:500, .combine=c) %dopar% {
ss<-1/2+rr
uu<-runif(1, min = 0, max = 1)
if(uu<=ss){
return(uu)
rr<-rr+0.001
}else{
return(0)
rr<-rr-0.001}
}
Run Code Online (Sandbox Code Playgroud)
如果不可能使用foreach其他方式让我重新编写循环,以便能够使用所有内核并加快速度?