我想在循环中创建一个字符串,并在此循环中将此字符串用作对象。这是一个简化的例子:
for (i in 1:2) {
x <- paste("varname",i, sep="")
x <- value
}
循环应该创建varname1,varname2。然后我想使用varname1,varname2作为对象来赋值。我尝试过paste(),print()等。 谢谢你的帮助!
答案 0 :(得分:4)
您可以创建call()
到<-
,然后对其进行评估。这是一个例子,
value <- 1:5
for (i in 1:2) {
x <- paste("varname",i, sep="")
eval(call("<-", as.name(x), value))
}
创建两个对象varname1
和varname2
varname1
# [1] 1 2 3 4 5
varname2
# [1] 1 2 3 4 5
但是你应该尽量避免在方法/函数中分配到全局环境。我们可以使用列表和substitute()
,然后我们将新变量放在同一个地方。
f <- function(aa, bb) {
eval(substitute(a <- b, list(a = as.name(aa), b = bb)))
}
Map(f, paste0("varname", 1:2), list(1:3, 3:6))
# $varname1
# [1] 1 2 3
#
# $varname2
# [1] 3 4 5 6
答案 1 :(得分:1)
@MahmutAliÖZKURAN已回答了有关如何使用循环执行此操作的问题。实现这一目标的更多“R-ish”方法可能是:
mapply(assign, <vector of variable names>, <vector of values>,
MoreArgs = list(envir = .GlobalEnv))
或者,如上所述:
mapply(assign, paste0("varname", 1:2), <vector of values>,
MoreArgs = list(envir = .GlobalEnv))
答案 2 :(得分:0)
assign("variableName", 5)
会这样做。
例如,如果您在字符串数组中有变量名,则可以将它们设置为循环:
assign(varname[1], 2 + 2)
越来越多的信息
https://stat.ethz.ch/R-manual/R-patched/library/base/html/assign.html
答案 3 :(得分:0)
我遇到了同样的问题,由于某种原因,我的申请无法正常工作(申请,直接分配,或者我的首选goto,mclapply)
但这可行
const config = require('../config/database');
const User = require('./users');
const mongoose = require('mongoose');
const CompanySchema = mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true },
city: { type: String, required: true },
phoneNumber: { type: String, required: true },
creator :[{
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}]
}, { collection: 'companies' });
module.exports = mongoose.model('Company', CompanySchema);