2014-01-21 90 views
2

我有一個名爲「scenbase」的列表,其中包含40個數據幀,每個數據幀爲326行,每列68列。我想使用lapply()來對數據框進行子集化,以便它們只保留行33-152。我寫了一個名爲trim()(下面)的簡單函數,並試圖將它應用到數據框的列表中,但收到錯誤消息。功能和我的在使用它與lapply嘗試低於:使用lapply從數據框的子集行 - 不正確的維數錯誤

修剪< - 函數(ⅰ) {(ⅰ< - I [33:152,])}

lapply(scenbase,修剪)

錯誤I [33:152,]:尺寸的不正確的數字

當我嘗試做同樣的事情,以被包括在各個數據幀中的一個(soil11base.txt)列表(下面),它的工作S作爲預期:

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

任何想法,我需要做的就是尺寸是否正確?

回答

1

您有2個解決方案。您可以

(一)分配到一個新的列表newList = lapply(scenbase, function(x) { x[33:152,,drop=F]})

(二)使用<<-運營商將在地方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]})