Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重叠并应用于列表R的每个组件和元素_R_List_Dataframe_Lapply - Fatal编程技术网

重叠并应用于列表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]))