[英]R: Applying function to DataFrame
我有以下代碼:
library(Ecdat)
data(Fair)
Fair[1:5,]
x1 = function(x){
mu = mean(x)
l1 = list(s1=table(x),std=sd(x))
return(list(l1,mu))
}
mylist <- as.list(Fair$occupation,
Fair$education)
x1(mylist)
我想要的是x1輸出mylist中所選項目的結果。 但是,我得到了In mean.default(x) : argument is not numeric or logical: returning NA
。
如果將列表傳遞給函數,則需要使用lapply
output<-lapply(mylist,FUN=x1)
這將為mylist中的每個元素處理函數x1並返回結果列表以輸出。
在這里, mylist
以正確的方式不是創建一個list
不需要也可以作為data.frame
是一個list
長度相等的列。 因此,只需對感興趣的列進行子集化並應用功能
lapply(Fair[c("occupation", "education")], x1)
在OP的代碼中, as.list
僅創建length
601的list
,每個list
中只有一個元素。
str(mylist)
#List of 601
#$ : int 7
#$ : int 6
#$ : int 1
#...
#...
代碼中的另一個問題是它甚至沒有考慮第二個參數。 用一個簡單的例子
as.list(1:3, 1:2)
#[[1]]
#[1] 1
#[[2]]
#[1] 2
#[[3]]
#[1] 3
完全沒有考慮第二個參數。 可能是
list(1:3, 1:2)
#[[1]]
#[1] 1 2 3
#[[2]]
#[1] 1 2
但是對於data.frame列,我們不需要顯式調用該list
因為它是長度相等的vectors
的list
。
關於OP帖子中的錯誤, mean
適用於vector
,而不適用於list
或data.frame
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.