R 为数组列表应用函数

R 为数组列表应用函数,r,R,这是一个新手问题,但我在理解数组列表数据集的apply函数时遇到了一些问题 这是我拥有的数据和我正在尝试做的事情的一个例子: > dataset1=array(data1,dim=c(2,10,5)) > dataset2=array(data2,dim=c(2,10,5)) > dataset3=array(data2,dim=c(2,10,5)) > datasets=list(data1=dataset1,data2=dataset2,data3=dataset3)

这是一个新手问题,但我在理解数组列表数据集的apply函数时遇到了一些问题

这是我拥有的数据和我正在尝试做的事情的一个例子:

> dataset1=array(data1,dim=c(2,10,5))
> dataset2=array(data2,dim=c(2,10,5))
> dataset3=array(data2,dim=c(2,10,5))
> datasets=list(data1=dataset1,data2=dataset2,data3=dataset3)
> str(datasets)
List of 3
 $ data1: num [1:2, 1:10, 1:5] 0.101 1.192 0.154 0.911 1.889 ...
 $ data2: num [1:2, 1:10, 1:5] 2.84 1.63 1.78 1.24 1.09 ...
 $ data3: num [1:2, 1:10, 1:5] 2.84 1.63 1.78 1.24 1.09 ...
我想用0替换1.5以下的所有值

for (d in 1:3){
  for (n in 1:2){
    for (i in 1:10){
      datasets[[d]][n,i,][datasets[[d]][n,i,]<=1.5]=0
    }
  }
}
for(1:3中的d){
对于(1:2中的n){
因为(我在1:10){

数据集[[d]][n,i,][datasets[[d]][n,i,]具有可复制数据:

dataset1 = array(rnorm(100),dim = c(2,10,5))
dataset2 = array(rnorm(100),dim = c(2,10,5))
dataset3 = array(rnorm(100),dim = c(2,10,5))
datasets = list(data1 = dataset1, data2 = dataset2, data3 = dataset3)
现在编写一个匿名函数来进行常规替换,并在列表中使用该函数:

datasets.updated <- lapply(datasets, function(x) {x[x < 1.5] <- 0; x})

datasets.updated我不太喜欢“;”使用R,但它是有效的。所以我将使用“ifelse”添加这个解决方案:lappy(数据集,函数(x)ifelse(x<1.5,0,x))。你为什么不喜欢使用“;”。这是为了特定的重新发布吗?这里只是语法,我可以用分号将其全部推到一行上,这是懒惰的-将匿名函数放在更好的布局中要好得多,但这意味着它们不应该是匿名的(对我来说)。ifelse是一个很好的整理。请注意,mdsumner最初的匿名函数在处理大型数据集时要快得多(我使用了
dataset1=array(rnorm(100000000)、dim=c(2001000500))
等,结果比使用
ifelse
快6.8倍)。
datasets.updated <- lapply(datasets, function(x) ifelse(x < 1.5, 0, x))