我有一个名为“scebase”的列表,其中包含40个数据帧,每个数据帧为326行乘68列 . 我想使用lapply()对数据帧进行子集化,因此它们只保留行33-152 . 我写了一个名为trim()的简单函数(下面),并尝试将其应用于数据框列表但收到错误消息 . 该函数和我尝试使用lapply如下:
trim < - function(i){(i < - i [33:152,])} lapply(scebase,trim)i [33:152,]中的错误:维数不正确
当我尝试对列表中包含的单个数据框(soil11base.txt)执行相同的操作时(如下所示),它按预期工作:
soil11base.txt < - soil11base.txt [33:152,]
知道我需要做些什么才能使尺寸正确吗?
1 回答
你有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)的代码:
以下是一些复制解决方案(b)的代码: