r-使用lapply从数据帧中子集 - 尺寸误差数字不正确



i有一个名为" Scenbase"的列表,其中包含40个数据帧,每个数据帧每326行乘68列。我想使用lapply()将数据帧子设置为子集,因此它们仅保留33-152行。我已经编写了一个名为Trim()(下)的简单函数,并且正在尝试将其应用于数据帧列表,但正在获取错误消息。该功能和我将其与Lapply一起使用的尝试如下:

trim< - 功能(i) {(i< - i [33:152,])}

lapply(scenbase,trim)

i [33:152,]中的错误:尺寸数量不正确

当我尝试对列表中包含的单个数据帧(soil11base.txt)进行相同的操作(下图)时,它可以按预期工作:

soil11base.txt< - soil11base.txt [33:152,]

知道我需要做什么才能使尺寸正确?

您有2个解决方案。您可以

(a)分配给新列表newList = lapply(scenbase, function(x) { x[33:152,,drop=F]} )

(b)使用<<-操作员将分配您的修剪数据,将其分配给lapply(1:length(scenbase), function(x) { scenbase[[x]] <<- scenbase[[x]][33:152,,drop=F]} )

您的呼叫不起作用,因为i不在全局范围中。您可以通过使用拨打<<-运算符的呼叫来解决该问题,该操作员分配给它在连续的父环境中找到的第一个变量。或通过创建新的修剪列表。

这是一些复制解决方案(a)的代码:

listOfDfs = list()
for(i in 1:10) { listOfDfs[[i]] = data.frame("x"=sample(letters,200,replace=T),"y"=sample(letters,200,replace=T)) }
choppedList = lapply(listOfDfs, function(x) { x[33:152,,drop=F]} )

这是一些复制解决方案(b)的代码:

listOfDfs = list()
for(i in 1:10) { listOfDfs[[i]] = data.frame("x"=sample(letters,200,replace=T),"y"=sample(letters,200,replace=T)) }
lapply(1:length(listOfDfs), function(x) { listOfDfs[[x]] <<- listOfDfs[[x]][33:152,,drop=F]} )

最新更新