簡體   English   中英

R:將函數應用於DataFrame

[英]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因為它是長度相等的vectorslist

關於OP帖子中的錯誤, mean適用於vector ,而不適用於listdata.frame

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM