簡體   English   中英

如何傳遞R函數參數來子集列

[英]How to pass an R function argument to subset a column

首先,我是新來的人,這是我的第一篇文章,因此,如果我做的不正確,請事先道歉。 我確實花時間先搜索一下,但是找不到我想要的東西。 其次,我很確定自己正在違反一條規則,因為這個問題與我正在參加的“ coursera.org” R編程課程有關(這是作業的一部分),但是截止日期已經過去,並且我現在失敗了,我將在下個月重復該主題,然后重試,但是我現在處於損害控制方面,試圖找出問題所在。

基本上,下面是我的代碼:我想做的是從一系列文件中讀取數據。 這些文件有四列,標題分別是:日期,硝酸鹽,硫酸鹽和ID,並包含各行數據。

我嘗試編寫的函數應采用文件目錄,污染物(因此為硝酸鹽或硫酸鹽)以及編號文件集的參數,例如文件1和2,文件1至4等。返回函數的平均值應為選定文件中選定污染物的平均值。

我會使用這樣的調用來調用函數

pollutantmean("datafolder", "nitrate", 1:3)

並且返回值應該只是一個數字,在這種情況下,這是數據文件1至3中硝酸鹽的平均值

好的,我希望我提供了足夠的信息。 其他有用的東西是:

  • 操作系統:Ubuntu
  • 語言:R
  • 收到錯誤消息:

    警告消息:在is.na(x)中:is:na()應用於類型為“ NULL”的非(列表或向量)

就像我說的那樣,數據文件是位於文件夾中的一系列文件,具有四列寬,並且行數有所不同。

我的功能代碼如下:

pollutantmean <- function(directory, pollutant, id = 1:5) { #content of the function
#create a list of files, a vector I think
files_list <- dir(directory, full.names = TRUE) 
# Now create an empty data frame
dat <- data.frame()

# Next step is to execute a loop to read all the selected data files into the dataframe
for (i in 1:5) { 
    dat <- rbind(dat, read.csv(files_list[i]))
}

#subsets the rows matching the selected monitor numbers
dat_subset <- dat[dat[, "ID"] == id, ]

#identify the median of the pollutant and ignore the NA values
median(dat_subset$pollutant, na.rm = TRUE)

好的,就是這樣,通過反復試驗,我很確定代碼的最后一行“ median(dat_subset$pollutant, na.rm = TRUE) ”似乎是問題所在。 我對污染物的功能(應該是硫酸鹽或硝酸鹽)傳遞了一個論點,但似乎dat_subset$pollutant位的代碼無法正常工作。 我以某種方式使通過的污染物論點不進入功能體。 理想情況下, dat_subset$pollutant位應等效於dat_subset$nitratedat_subset$sulfate具體取決於傳遞給函數的參數。

如果像示例中那樣在對象中傳遞列名(將其存儲在pollutant ),則不能使用$運算符作為子集。 因此,在您的情況下,嘗試使用[]進行子集化:

median(dat_subset[,pollutant], na.rm = TRUE)

要么

median(dat_subset[[pollutant]], na.rm = TRUE)

那樣有用嗎?

暫無
暫無

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

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