我想在R中获得最大/最小的可表示数字.
输入".Machine"后
我有:
$double.xmin
[1] 2.225074e-308
$double.xmax
[1] 1.797693e+308
Run Code Online (Sandbox Code Playgroud)
但是,即使我在R命令提示符下键入2.225074e-309,我得到2.225074e-309而不是预期的0
如何找到最大/最小数字,其中加1或减1将导致Inf(添加1到最大数字)或0(从最小数字减去1)?
我正在使用parallelR中的库来处理我正在应用复杂操作的大型数据集.
为了提供可重现的代码,您可以在下面找到一个更简单的示例:
#data generation
dir <- "C:/Users/things_to_process/"
setwd(dir)
for(i in 1:800)
{
my.matrix <- matrix(runif(100),ncol=10,nrow=10)
saveRDS(my.matrix,file=paste0(dir,"/matrix",i))
}
#worker function
worker.function <- function(files)
{
files.length <- length(files)
partial.results <- vector('list',files.length)
for(i in 1:files.length)
{
matrix <- readRDS(files[i])
partial.results[[i]] <- sum(diag(matrix))
}
Reduce('+',partial.results)
}
#master part
cl <- makeCluster(detectCores(), type = "PSOCK")
file_list <- list.files(path=dir,recursive=FALSE,full.names=TRUE)
part <- clusterSplit(cl,seq_along(file_list))
files.partitioned <- lapply(part,function(p) file_list[p])
results <- clusterApply(cl,files.partitioned,worker.function)
result <- Reduce('+',results)
Run Code Online (Sandbox Code Playgroud)
本质上,我想知道是否尝试并行读取文件将以交错方式完成.结果,如果这个瓶颈会降低并行运行任务的预期性能?
如果我首先在列表中一次读取所有矩阵然后将此列表的块发送到每个核心以便进行处理,那会更好吗?如果这些矩阵更大,我能够立即将它们全部加载到列表中吗?
假设我有一个我要添加的元素向量:
a <- c(1,2,-7,5)
Run Code Online (Sandbox Code Playgroud)
以下是一些其他测试用例:
a <- c(1,2,-3,5)
a <- c(1,2,-7,-3,5)
Run Code Online (Sandbox Code Playgroud)
我知道我可以用它sum(a)来得到结果,但如果我有条件需要注意:
current_sum = 0
for(i in 1:length(a)){
last_sum = current_sum
current_sum = current_sum + a[i]
if(current_sum < 0)
{
current_sum = last_sum
current_sum = current_sum + (a[i]*-1)
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,每次总和为负数时,我们返回前一个总和并添加使该总和为负数的相反数字.作为第一个例子的结果输出15
显然,元素向量在手之前是未知的,性能是有问题的.有没有完全矢量化的方法或更有效的方法来做到这一点(避免循环)?
假设我想预测,如果一个人的class1=healthy或class2= fever.我有一个包含以下域名的数据集:{normal,cold,dizzy}
转换矩阵将包含从我们的训练数据集生成的转换概率,而初始向量将包含一个人从域开始(第1天)具有状态x的概率{normal,cold,dizzy},同样这也是从我们的训练集生成的.
如果我想构建一阶马尔可夫链,我会为每个类生成一个3x3转换矩阵和一个1x3初始向量,如下所示:
> TransitionMatrix
normal cold dizzy
normal NA NA NA
cold NA NA NA
dizzy NA NA NA
>Initial Vector
normal cold dizzy
[1,] NA NA NA
Run Code Online (Sandbox Code Playgroud)
NA将填充相应的概率.
1 - 我的问题是关于高阶链中的过渡矩阵.例如,在二阶MC中,我们将有一个domain²xdomain²像这样的大小的转换矩阵:
normal->normal normal->cold normal->dizzy cold->normal cold->cold cold->dizzy dizzy->normal dizzy->cold dizzy->dizzy
normal->normal NA NA NA NA NA NA NA NA NA
normal->cold NA NA NA NA NA NA NA NA NA
normal->dizzy NA NA NA NA NA NA NA …Run Code Online (Sandbox Code Playgroud) 我想一个函数应用于矩阵的输入a,这个功能将改变第一个元素c[a[1]]和下一个元素,b[a[i],a[i+1]]从开始i = 1达i = ncol(a) - 1.
示例输入:
a <- matrix(c(1,4,3,1),nrow=1)
b <- matrix(1:25,ncol=5,nrow=5)
c <- matrix(4:8,ncol=5,nrow=1)
Run Code Online (Sandbox Code Playgroud)
预期产量:
>a
4 16 14 3
#c[a[1]] gave us the first element: 4
#b[a[1],a[2]] gave us the second element: 16
#b[a[2],a[3]] gave us the third element: 14
#b[a[3],a[4]] gave us the fourth element: 3
Run Code Online (Sandbox Code Playgroud)
mapply()到目前为止,我一直试图使用但没有任何成功.这个想法是避免循环,因为这些东西会导致R的主要性能下降