我试图通过使用source命令执行R代码来检索结果.由于某些变量具有相同的名称,因此执行的R文件中的变量将覆盖当前变量.如何在不覆盖当前变量的情况下检索结果?
#main.R Code
b=0
source('sub.R')
if(a>1){print(T)}else{print(F)}
#sub.R
b=1
test<-function(x){x=1}
a=test(b)
Run Code Online (Sandbox Code Playgroud)
我只想取回a从sub.R没有b在main.R由同名变量被覆盖sub.R.本质上,我想执行一个R文件,就像调用一个只保留返回值的方法一样.
我发现如果并行计算期间有多个打印函数,则只有最后一个会显示在控制台上。所以我设置了outfile选项,希望我能得到每次打印的结果。这是 R 代码:
cl <- makeCluster(3, type = "SOCK",outfile="log.txt")
abc <<- 123
clusterExport(cl,"abc")
clusterApplyLB(cl, 1:6,
function(y){
print(paste("before:",abc));
abc<<-y;
print(paste("after:",abc));
}
)
stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)
但我只得到三个记录:
starting worker for localhost:11888
Type: EXEC
Type: EXEC
[1] "index: 3"
[1] "before: 123"
[1] "after: 2"
Type: EXEC
[1] "index: 6"
[1] "before: 2"
[1] "after: 6"
Type: DONE
Run Code Online (Sandbox Code Playgroud) 我想知道是否有任何有效的方法可以通过另一个data.table中定义的多个条件来过滤data.table.在这种情况下有2个data.table:
# the filter data.table defines the condition
dt_filter<-data.table(A=c(1,2),B=c(8,7))
# dt1 the data.table to be filtered
dt1<-data.table(A=rep(c(1,2),5),B=c(8,4,3,1,1,5,9,7,1,1),C=c(rep(1,5),rep(2,5)))
ls_tmp<-lapply (1:nrow(dt_filter),function(i){
# exclude the record with the A&B defined the filter
dt1_add<-dt1[A==dt_filter[[i,1]]&B!=dt_filter[[i,2]]]
})
result<- rbindlist(ls_tmp)
Run Code Online (Sandbox Code Playgroud)
由于lapply循环,我的样本似乎效率不高.我不知道如何通过其他方式重写它.
很抱歉提出简单问题.我是R初学者.我试图加载库运行时,例如
x<-"snow"; library(eval(x))
Run Code Online (Sandbox Code Playgroud)
结果:
Error in library(eval(x)) : 'package' must be of length 1.
Run Code Online (Sandbox Code Playgroud)
如果有人给我一些解决方案,我将不胜感激.
我写了一个脚本来重命名文件。但是我发现修改日期更改为相同的日期。因此,如果按日期对原始订单进行排序,则该原始订单将被破坏。有什么方法可以更改名称而不更改修改日期吗?或者,尽管日期已更改,但按日期排序的顺序仍然相同。以下是我当前的代码:
# save previous working folder
wkdir <- getwd()
# set the target folder
setwd("C:/Users/YY/Desktop/Tmp file/")
# set the file pattern
a <- list.files(path = ".", pattern = "abc_*.*$")
# set the name to be replaced
b<-gsub("abc_","ABC_",a)
# rename
file.rename(a,b)
# restore previous working folder
setwd(wkdir)
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮助我,我将不胜感激。
很抱歉问新手问题.我不知道如何解释microbenchmark结果中的lq和uq列.这是一个例子:
Unit: microseconds
expr min lq median uq max neval
f(1000, 1) 1082.875 1139.485 1151.071 1162.327 1199918.296 1000
g(1000, 1) 193.004 219.157 221.806 228.427 1099.097 1000
Run Code Online (Sandbox Code Playgroud) 有一个data.frame附加到现有文件.当它被write.table函数追加时,它可能会导致重复的记录进入文件.以下是示例代码:
df1<-data.frame(name=c('a','b','c'), a=c(1,2,2))
write.csv(df1, "export.csv", row.names=FALSE, na="NA");
#"export.csv" keeps two copies of df1
write.table(df1,"export.csv", row.names=F,na="NA",append=T, quote= FALSE, sep=",", col.names=F);
Run Code Online (Sandbox Code Playgroud)
因此理想情况下,输出文件应该只保留df1的一个副本.但write.table函数没有任何重复检查参数.
感谢您提前提出任何建议.
我有一个像这样的data.table:
> dt<-data.table(F=rep(c('a','b','c'),each=2), fix=c(10:15),a=c(1:6), b=c(2:7),c=c(3:8))
> dt
F fix a b c
1: a 10 1 2 3
2: a 11 2 3 4
3: b 12 3 4 5
4: b 13 4 5 6
5: c 14 5 6 7
6: c 15 6 7 8
Run Code Online (Sandbox Code Playgroud)
列F存储要为每行提取的列.因此,对于前2个记录列,将提取列'a',而将为3和4记录提取列'b'.每个记录都会保留"修复".理想的输出应该是这样的:
F fix new
1: a 10 1
2: a 11 2
3: b 12 4
4: b 13 5
5: c 14 7
6: c 15 8
Run Code Online (Sandbox Code Playgroud) r ×8
data.table ×2
append ×1
csv ×1
dataframe ×1
debugging ×1
dplyr ×1
file-rename ×1
write.table ×1