簡體   English   中英

通過R中的名稱將參數傳遞給函數

[英]Passing arguments to a function by their names in R

我有2個數據框:

a=c("aaaa","aaaaa", "aaaaaaaa")
b=c(3,5,6)
sample1=data.frame(a,b)

a=c("bb","bbbb","bbbbbbb")
b=c(4,6,54)
sample2=data.frame(a,b)

我想遍歷樣本並將這些數據幀中的列傳遞給某些函數,例如nchar(sample1 $ b)

因此,使用應在for循環中執行的操作是什么? 下面的代碼不起作用...對不起,它起作用了,但是打印了例如“ sample1 $ b”字符​​串的長度

for(i in 1:2) {

   cat(nchar(eval(paste("sample",i,"$b"))))

}

謝謝

首先,解決第一個問題,即通過mget收集數據幀,使它們不在單個列表中:

> l <- mget(x = paste0("sample",1:2))
> l
$sample1
         a b
1     aaaa 3
2    aaaaa 5
3 aaaaaaaa 6

$sample2
        a  b
1      bb  4
2    bbbb  6
3 bbbbbbb 54

解決該問題后,您只需在結果列表中使用lapply即可:

> lapply(l,function(x) nchar(x[["b"]]))
$sample1
[1] 1 1 1

$sample2
[1] 1 1 2

就像MrFlick所建議的那樣,您應該將相關數據框存儲在列表中:

samples <- list(sample1, sample2)

這使您避免通過名稱來引用每個數據框:

lapply(samples, function(smp) nchar(smp$b))

如果您確實想使用單獨的變量(不應該!),則可以使用get來構造對象的名稱,以返回該對象:

for (i in 1:2) print(nchar(get(paste0("sample", i))$b))

暫無
暫無

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

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