这是我试图通过JavaScript或点或[]表示法构建的:
var shoppingCart = {
'item1' : {
'description' : 'This is item #1',
'price' : 10,
'quantity' : 1,
'shipping' : 0,
'total' : 10
}
};
Run Code Online (Sandbox Code Playgroud)
现在,如果'item1'是变量名称itemName.
这有效:
var shoppingCart = {};
shoppingCart[itemName] = itemName;
alert(shoppingCart.item1);
哪个回报 item1
但这不起作用:
1 var shoppingCart = {};
2 shoppingCart[itemName]['description'] = 'This is Item #1';
JS刚刚在第2行去世,为什么?以及如何将描述值分配给"描述"?
我会这样做:
var shoppingCart = {
itemName : {
'description' : description,
'price' : price,
'quantity' : quantity,
'shipping' : shipping,
'total' : total
} …Run Code Online (Sandbox Code Playgroud) 我发现自己经常写下以下两行.有简洁的替代方案吗?
newObj <- vals
names(newObj) <- nams
# This works, but is ugly and not necessarily preferred
'names<-'(newObj <- vals, nams)
Run Code Online (Sandbox Code Playgroud)
我正在寻找类似的东西(当然这不起作用):
newObj <- c(nams = vals)
Run Code Online (Sandbox Code Playgroud)
将它包装在一个函数中也是一个选项,但我想知道功能是否已经存在.
样本数据
vals <- c(1, 2, 3)
nams <- c("A", "B", "C")
Run Code Online (Sandbox Code Playgroud) 我制作了一个大型数据框(1700 + obs,159个变量),其功能是从网站收集信息.通常,函数会查找某些列的数值,因此它们是数字的.但是,有时它会找到一些文本,并将整个列转换为文本.我有一个df,其列类是正确的,我想将这些类"粘贴"到一个新的,不正确的df.比方说,例如:
dfCorrect<-data.frame(x=c(1,2,3,4),y=as.factor(c("a","b","c","d")),z=c("bar","foo","dat","dot"),stringsAsFactors = F)
str(dfCorrect)
'data.frame': 4 obs. of 3 variables:
$ x: num 1 2 3 4
$ y: Factor w/ 4 levels "a","b","c","d": 1 2 3 4
$ z: chr "bar" "foo" "dat" "dot"
## now I have my "wrong" data frame:
dfWrong<-as.data.frame(sapply(dfCorrect,paste,sep=""))
str(dfWrong)
'data.frame': 4 obs. of 3 variables:
$ x: Factor w/ 4 levels "1","2","3","4": 1 2 3 4
$ y: Factor w/ 4 levels "a","b","c","d": 1 2 3 4
$ z: Factor w/ …Run Code Online (Sandbox Code Playgroud) 刚开始使用Haskell,据说除了IO包外,Haskell中的所有内容都是“不可变的”。因此,当我将名称绑定到某物时,它总是不可变的?问题,如下:
Prelude> let removeLower x=[c|c<-x, c `elem` ['A'..'Z']]
Prelude> removeLower "aseruiiUIUIdkf"
"UIUI"
Run Code Online (Sandbox Code Playgroud)
所以在这里:
1. “removeLower" is an immutable? Even it's a function object?
But I can still use "let" to assign something else to this name.
2. inside the function "c<-x" seems that "c" is a variable.
It is assigned by list x's values.
Run Code Online (Sandbox Code Playgroud)
我使用的是 C 语言中的“变量”这个词,不知道 Haskell 是如何命名它的所有名称的?
谢谢。
我需要从输入另一个数据框名称并重塑数据的函数中创建一个数据框。当我需要在输入表名称转换后命名输出时,问题就出现了。到目前为止我的代码是:
tablaXYZ<-data.frame(a=seq(1,2,1), 'X1'=seq(2,3,1), 'X2'=seq(3,4,1))
rownames(tablaXYZ)<-c('X1', 'X2')
Run Code Online (Sandbox Code Playgroud)
我写的函数是:
creaMelts<-function(tbl){
library(reshape2)
texto<-deparse(substitute(tbl))
tbl2<-melt(tbl, id.vars=rownames(tbl))
texto2<-substr(texto,4,nchar(texto))
colnames(tbl2)<-c('userId','movieId', texto2)
tblName<<-paste0('df', texto2)
print(paste('tblName', tblName, ' '))
assign(tblName, tbl2)
return(assign(tblName, tbl2))
}
Run Code Online (Sandbox Code Playgroud)
当我运行时:
creaMelts(tablaXYZ)
Run Code Online (Sandbox Code Playgroud)
我得到:
"tblName dflaXYZ "
Run Code Online (Sandbox Code Playgroud)
因此,考虑到“分配”工作在第二位给出的对象中返回,名称存储在第一位的对象中,例如:
`m<-'hola'`
assign(m, tablaXYZ)
Run Code Online (Sandbox Code Playgroud)
然后我要求 m,我得到:
"hola"
Run Code Online (Sandbox Code Playgroud)
但是如果我要求“hola”,我会得到一张桌子:
hola
a X1 X2
X1 1 2 3
X2 2 3 4
Run Code Online (Sandbox Code Playgroud)
我以为我会有一个名为“dflaXYZ”的数据框,其中包含以下值:
userId movieId laXYZ NA
1 2 3 a 1
2 3 4 a 2
Run Code Online (Sandbox Code Playgroud)
但如果我跑:
dflaXYZ
Run Code Online (Sandbox Code Playgroud)
我只得到:
"dflaXYZ"
Run Code Online (Sandbox Code Playgroud)
如果我运行例如:
a<-creaMelts(tablaXYZ)
Run Code Online (Sandbox Code Playgroud)
然后要求“a”,我得到了想要的表。
userId movieId laXYZ NA
1 2 …Run Code Online (Sandbox Code Playgroud) 懒惰我想知道是否有更好的方法将一个对象(源)中的属性复制到另一个对象(目标),只有在后者中存在属性时?它不一定要使用Underscore.
例如,
_.mixin({
assign: function (o, destination, source) {
for (var property in source) {
if (destination.hasOwnProperty(property)) {
destination[property] = source[property];
}
}
return destination;
}
});
console.log( _().assign({ a: 1, b: 2, d: 3 }, { a: 4, c: 5 }) ) // a: 4, b: 2, d: 3
Run Code Online (Sandbox Code Playgroud) 我在 Rakudo 2016.07 中运行良好的操作类中有以下方法,但我刚刚安装了 2016.11,现在新的 Rakudo 说我的方法尝试分配给只读变量,我只是没有看到问题:
method ptName ($/) {
my $nameStr = $/.Str, my $lastName, my $firstName;
my $newMatch # this is line 182;
# Cannot assign to a readonly variable or a value
= $nameStr.match(/ \" (<alpha>+) .*? \, \s* (<alpha>+) .*? \" /);
$lastName = $newMatch[0];
$firstName = $newMatch[1];
make "$lastName $firstName";
}
Run Code Online (Sandbox Code Playgroud)
整个错误信息是
Cannot assign to a readonly variable or a value
in method ptName at /home/lisprog/Binary/grammar.pl line 182
in regex ptName at /home/lisprog/Binary/grammar.pl line …Run Code Online (Sandbox Code Playgroud) 我写了一个测试程序,现在似乎如果我不使用$/方法签名因为我必须在方法中使用.match,我就不能再做任何事了.我做错了什么?
另一个问题是,如果是.match集合$/,并且$/是只读的,那么我不能$/在包含.match语句的方法的签名中,并且我不能.match在方法内部有多个,因为每个都.match将尝试设置只读$/.这对编程来说非常尴尬.
这是测试程序,.match里面只有一个语句和结果:
grammar test {
regex TOP { <foo><bar> }
regex foo { :i \s* foo \s* }
regex bar { :i \s bar \s* }
}
class actTest {
method foo ($x) { # program fails if I use $/ in signature
print "1 "; say $x; # how to combine the 2 and show $x as …Run Code Online (Sandbox Code Playgroud) 我正在使用 Shopify 的 Liquid 模板。我希望某些元素仅在该月份恰好是 12 月时才显示。由于有多个元素需要这个,所以我想在文档顶部设置一个变量并稍后引用它。这是我所得到的有效的:
<!-- At the top of the page -->
{% assign month = 'now' | date: "%m" %}
{% if month == "12" %}
{% assign isDecember = true %}
{% else %}
{% assign isDecember = false %}
{% endif %}
<!-- Only show in December -->
{% if isDecember %}
Happy Holidays
{% endif %}
Run Code Online (Sandbox Code Playgroud)
这可行(为了测试,我将“12”更改为当前月份),但它非常难看。在大多数语言中我会这样做:
{% assign isDecember = (month == "12") %}
Run Code Online (Sandbox Code Playgroud)
Liquid 不接受括号,所以显然这是行不通的。没有括号它也不起作用。该文档提供了使用运算符和为变量分配静态值的示例,但没有介绍如何将两者结合起来。
我可以将过滤器的输出分配| …
operators variable-assignment liquid assignment-operator assign
设置数据框:
import pandas as pd
import numpy as np
np.random.seed(99)
rows = 10
df = pd.DataFrame ({'A' : np.random.choice(range(0, 2), rows, replace = True),
'B' : np.random.choice(range(0, 2), rows, replace = True)})
df
A B
0 1 1
1 1 1
2 1 0
3 0 1
4 1 1
5 0 1
6 0 1
7 0 0
8 1 1
9 0 1
Run Code Online (Sandbox Code Playgroud)
我想添加一列“C”,其值“X”为 df.A 和 df.B 均为 0,其他值为“Y”。
我试过:
df.assign(C = lambda row: 'X' if row.A + …Run Code Online (Sandbox Code Playgroud)