[英]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.