重叠并应用于列表R的每个组件和元素
我有以下清单:重叠并应用于列表R的每个组件和元素,r,list,dataframe,lapply,R,List,Dataframe,Lapply,我有以下清单: lst lst <- list(a=c(2.5,9.8,5.0,6.7,6.5,5.2,34.4, 4.2,39.5, 1.3,0.0,0.0,4.1,0.0,0.0,25.5,196.5, 0.0,104.2,0.0,0.0,0.0,0.0,0.0),b=c(147.4,122.9,110.2,142.3)) P.S: 0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1])) 0.967113 == (147.
lst
lst <- list(a=c(2.5,9.8,5.0,6.7,6.5,5.2,34.4, 4.2,39.5, 1.3,0.0,0.0,4.1,0.0,0.0,25.5,196.5, 0.0,104.2,0.0,0.0,0.0,0.0,0.0),b=c(147.4,122.9,110.2,142.3))
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
但是有一个错误。。。
可能使用for
循环作为:
lst.new <- vector("list",1)
for (i in 1:length(lst)){
for (j in 1:dim(data.frame(lst[i]))[1]){
res[j] <- (as.numeric(unlist(lst[i]))[j]-mean(as.numeric(unlist(lst[i])))/
sd(as.numeric(unlist(lst[i])))
lst.new[[i]] <- res
}
}
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
预期结果可以是不同长度的列表或数据帧,如下所示:
a b
-0.36 0.967113
-0.19 -0.45
[...] [...]
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
等等
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
我最好使用
lappy
(或他的家庭函数),并根据输入和预期输出解决问题,scale
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
lapply(lst, scale)
根据输入和预期输出,
scale
应该可以工作
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
lapply(lst, scale)
为了完整起见,如果没有@akrun指出的
scale
函数,您的代码应该是:
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
lapply(lst,function(x) x-mean(x)/sd(x))
所有apply
s中的lapply
s表示您正在尝试计算单个值的mean
和sd
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
让我们一步一步地完成它。
lappy
获取lst
并将其分解为元素。每个元素依次作为匿名函数的参数提供。这意味着函数得到一个数字向量。然后,使用R的向量化,我们要做的是计算向量的每个元素,该元素的结果减去整个向量的平均值除以整个向量的sd
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
将其与代码中发生的情况进行比较:
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
lapply(lst,function (x) as.data.frame(apply(x,2, function(y)- lapply(lst,mean)/lapply(lst,sd))))
因此,第一个lappy
将中断lst,并将向量一次发送给函数
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
然后,函数必须将向量按列分解(apply
,带维度参数2)——这就是它抛出错误的地方。但是,即使它成功地将向量分解为元素,你还有两个lappy
s将单个元素分解,分别计算平均值
和sd
。为了完整起见,如果没有@akrun指出的scale
函数,您的代码应该是:
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
lapply(lst,function(x) x-mean(x)/sd(x))
所有apply
s中的lapply
s表示您正在尝试计算单个值的mean
和sd
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
让我们一步一步地完成它。
lappy
获取lst
并将其分解为元素。每个元素依次作为匿名函数的参数提供。这意味着函数得到一个数字向量。然后,使用R的向量化,我们要做的是计算向量的每个元素,该元素的结果减去整个向量的平均值除以整个向量的sd
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
将其与代码中发生的情况进行比较:
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
lapply(lst,function (x) as.data.frame(apply(x,2, function(y)- lapply(lst,mean)/lapply(lst,sd))))
因此,第一个lappy
将中断lst,并将向量一次发送给函数
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))
然后,函数必须将向量按列分解(apply
,带维度参数2)——这就是它抛出错误的地方。但是,即使它成功地将向量分解为元素,你也会有另外两个lappy
s分解单个元素,分别计算它们的mean
和sd
。你的意思是lappy(lst,scale)
一对旁注:(A)apply
用于矩阵。您没有矩阵,因此不需要在lappy
中应用。(b) 使用[[
访问单个列表项。基本上,当您有类似未列出(lst[2])
的内容时,您应该使用lst[[2]]
。好的“缩放”可以工作……但是如果我想应用我的个人函数(例如x[I]*10000/mean(x)),不同的方面缩放,如何将其应用于列表的每个值和元素?使用“lappy”(lappy…)?谢谢你的意思是lappy(lst,scale)
几个旁注:(A)apply
用于矩阵。你没有矩阵,所以你不需要lappy
中的apply
(b)使用[
访问单个列表项。基本上只要你有unlist(lst[2])
您应该使用lst[[2]]
。好的“缩放”可以工作……但是如果我想应用我的个人功能(例如x[I]*10000/mean(x)),不同的方面缩放,如何将其应用于列表中的每个值和元素?使用“lappy(lappy…”?谢谢
P.S:
0.36 == (2.5- mean(unlist(lst[1])))/sd(unlist(lst[1]))
0.967113 == (147.4 -mean(unlist(lst[2])))/sd(unlist(lst[2]))